From 4d59ad872ce780ccdb2eb6569359c9139e7b5c2b Mon Sep 17 00:00:00 2001 From: Anthony Perkins Date: Sat, 14 Dec 2019 17:56:30 +0000 Subject: [PATCH] Clean up vim --- pack/acp/start/ale/LICENSE | 22 - pack/acp/start/ale/ale_linters/ada/gcc.vim | 54 - .../ale/ale_linters/ansible/ansible_lint.vim | 56 - .../ale/ale_linters/apiblueprint/drafter.vim | 38 - .../start/ale/ale_linters/asciidoc/alex.vim | 4 - .../ale/ale_linters/asciidoc/proselint.vim | 9 - .../start/ale/ale_linters/asciidoc/redpen.vim | 9 - .../ale/ale_linters/asciidoc/textlint.vim | 9 - .../start/ale/ale_linters/asciidoc/vale.vim | 9 - .../ale/ale_linters/asciidoc/writegood.vim | 4 - pack/acp/start/ale/ale_linters/asm/gcc.vim | 37 - pack/acp/start/ale/ale_linters/awk/gawk.vim | 22 - .../start/ale/ale_linters/bib/bibclean.vim | 75 - pack/acp/start/ale/ale_linters/c/ccls.vim | 14 - pack/acp/start/ale/ale_linters/c/clang.vim | 24 - pack/acp/start/ale/ale_linters/c/clangd.vim | 17 - .../acp/start/ale/ale_linters/c/clangtidy.vim | 49 - pack/acp/start/ale/ale_linters/c/cppcheck.vim | 28 - pack/acp/start/ale/ale_linters/c/cquery.vim | 30 - .../start/ale/ale_linters/c/flawfinder.vim | 25 - pack/acp/start/ale/ale_linters/c/gcc.vim | 28 - .../start/ale/ale_linters/chef/cookstyle.vim | 54 - .../start/ale/ale_linters/chef/foodcritic.vim | 41 - .../ale/ale_linters/clojure/clj_kondo.vim | 34 - .../start/ale/ale_linters/clojure/joker.vim | 34 - .../cloudformation/cfn_python_lint.vim | 35 - .../start/ale/ale_linters/cmake/cmakelint.vim | 24 - .../start/ale/ale_linters/coffee/coffee.vim | 23 - .../ale/ale_linters/coffee/coffeelint.vim | 43 - pack/acp/start/ale/ale_linters/cpp/ccls.vim | 14 - pack/acp/start/ale/ale_linters/cpp/clang.vim | 24 - .../start/ale/ale_linters/cpp/clangcheck.vim | 35 - pack/acp/start/ale/ale_linters/cpp/clangd.vim | 17 - .../start/ale/ale_linters/cpp/clangtidy.vim | 43 - pack/acp/start/ale/ale_linters/cpp/clazy.vim | 32 - .../start/ale/ale_linters/cpp/cppcheck.vim | 28 - .../acp/start/ale/ale_linters/cpp/cpplint.vim | 20 - pack/acp/start/ale/ale_linters/cpp/cquery.vim | 30 - .../start/ale/ale_linters/cpp/flawfinder.vim | 25 - pack/acp/start/ale/ale_linters/cpp/gcc.vim | 29 - .../start/ale/ale_linters/crystal/ameba.vim | 57 - .../start/ale/ale_linters/crystal/crystal.vim | 31 - pack/acp/start/ale/ale_linters/cs/mcs.vim | 37 - pack/acp/start/ale/ale_linters/cs/mcsc.vim | 81 - .../acp/start/ale/ale_linters/css/csslint.vim | 18 - pack/acp/start/ale/ale_linters/css/fecs.vim | 9 - .../start/ale/ale_linters/css/stylelint.vim | 19 - .../ale/ale_linters/cucumber/cucumber.vim | 46 - pack/acp/start/ale/ale_linters/cuda/nvcc.vim | 49 - .../ale/ale_linters/cypher/cypher_lint.vim | 26 - pack/acp/start/ale/ale_linters/d/dls.vim | 22 - pack/acp/start/ale/ale_linters/d/dmd.vim | 74 - .../acp/start/ale/ale_linters/dafny/dafny.vim | 26 - .../ale/ale_linters/dart/dartanalyzer.vim | 36 - .../ale/ale_linters/dart/language_server.vim | 20 - .../dockerfile/dockerfile_lint.vim | 61 - .../ale/ale_linters/dockerfile/hadolint.vim | 99 - .../start/ale/ale_linters/elixir/credo.vim | 63 - .../start/ale/ale_linters/elixir/dialyxir.vim | 41 - .../start/ale/ale_linters/elixir/dogma.vim | 45 - .../ale/ale_linters/elixir/elixir_ls.vim | 21 - pack/acp/start/ale/ale_linters/elixir/mix.vim | 52 - .../acp/start/ale/ale_linters/elm/elm_lsp.vim | 22 - pack/acp/start/ale/ale_linters/elm/make.vim | 240 -- .../start/ale/ale_linters/erlang/dialyzer.vim | 93 - .../acp/start/ale/ale_linters/erlang/erlc.vim | 96 - .../ale/ale_linters/erlang/syntaxerl.vim | 42 - pack/acp/start/ale/ale_linters/eruby/erb.vim | 25 - .../acp/start/ale/ale_linters/eruby/erubi.vim | 32 - .../start/ale/ale_linters/eruby/erubis.vim | 23 - .../start/ale/ale_linters/eruby/ruumba.vim | 62 - pack/acp/start/ale/ale_linters/fish/fish.vim | 67 - .../acp/start/ale/ale_linters/fortran/gcc.vim | 72 - .../ale_linters/fortran/language_server.vim | 19 - .../ale/ale_linters/fountain/proselint.vim | 9 - .../start/ale/ale_linters/fuse/fusionlint.vim | 33 - .../ale/ale_linters/gitcommit/gitlint.vim | 51 - .../start/ale/ale_linters/glsl/glslang.vim | 40 - .../acp/start/ale/ale_linters/glsl/glslls.vim | 30 - pack/acp/start/ale/ale_linters/go/bingo.vim | 29 - pack/acp/start/ale/ale_linters/go/gobuild.vim | 56 - pack/acp/start/ale/ale_linters/go/gofmt.vim | 10 - .../ale/ale_linters/go/golangci_lint.vim | 56 - pack/acp/start/ale/ale_linters/go/golint.vim | 21 - .../start/ale/ale_linters/go/gometalinter.vim | 57 - pack/acp/start/ale/ale_linters/go/gopls.vim | 30 - .../acp/start/ale/ale_linters/go/gosimple.vim | 15 - pack/acp/start/ale/ale_linters/go/gotype.vim | 19 - pack/acp/start/ale/ale_linters/go/govet.vim | 27 - .../start/ale/ale_linters/go/langserver.vim | 28 - .../start/ale/ale_linters/go/staticcheck.vim | 33 - .../start/ale/ale_linters/graphql/eslint.vim | 9 - .../start/ale/ale_linters/graphql/gqlint.vim | 15 - pack/acp/start/ale/ale_linters/hack/hack.vim | 22 - pack/acp/start/ale/ale_linters/hack/hhast.vim | 40 - .../start/ale/ale_linters/haml/hamllint.vim | 57 - .../handlebars/embertemplatelint.vim | 39 - .../ale/ale_linters/haskell/cabal_ghc.vim | 20 - .../acp/start/ale/ale_linters/haskell/ghc.vim | 18 - .../start/ale/ale_linters/haskell/ghc_mod.vim | 19 - .../ale/ale_linters/haskell/hdevtools.vim | 20 - .../acp/start/ale/ale_linters/haskell/hie.vim | 41 - .../start/ale/ale_linters/haskell/hlint.vim | 46 - .../ale/ale_linters/haskell/stack_build.vim | 23 - .../ale/ale_linters/haskell/stack_ghc.vim | 21 - pack/acp/start/ale/ale_linters/help/alex.vim | 4 - .../start/ale/ale_linters/help/proselint.vim | 9 - .../start/ale/ale_linters/help/writegood.vim | 4 - pack/acp/start/ale/ale_linters/html/alex.vim | 4 - pack/acp/start/ale/ale_linters/html/fecs.vim | 9 - .../start/ale/ale_linters/html/htmlhint.vim | 32 - .../start/ale/ale_linters/html/proselint.vim | 9 - .../start/ale/ale_linters/html/stylelint.vim | 27 - pack/acp/start/ale/ale_linters/html/tidy.vim | 70 - .../start/ale/ale_linters/html/writegood.vim | 4 - .../acp/start/ale/ale_linters/idris/idris.vim | 81 - pack/acp/start/ale/ale_linters/ispc/ispc.vim | 45 - .../start/ale/ale_linters/java/checkstyle.vim | 61 - .../start/ale/ale_linters/java/eclipselsp.vim | 161 - pack/acp/start/ale/ale_linters/java/javac.vim | 139 - .../start/ale/ale_linters/java/javalsp.vim | 41 - pack/acp/start/ale/ale_linters/java/pmd.vim | 36 - .../ale/ale_linters/javascript/eslint.vim | 10 - .../start/ale/ale_linters/javascript/fecs.vim | 10 - .../start/ale/ale_linters/javascript/flow.vim | 160 - .../ale/ale_linters/javascript/flow_ls.vim | 28 - .../start/ale/ale_linters/javascript/jscs.vim | 61 - .../ale/ale_linters/javascript/jshint.vim | 33 - .../ale/ale_linters/javascript/standard.vim | 30 - .../ale/ale_linters/javascript/tsserver.vim | 17 - .../start/ale/ale_linters/javascript/xo.vim | 26 - .../start/ale/ale_linters/json/jsonlint.vim | 43 - .../ale/ale_linters/julia/languageserver.vim | 21 - .../start/ale/ale_linters/kotlin/kotlinc.vim | 180 - .../start/ale/ale_linters/kotlin/ktlint.vim | 10 - .../ale/ale_linters/kotlin/languageserver.vim | 29 - pack/acp/start/ale/ale_linters/less/lessc.vim | 47 - .../start/ale/ale_linters/less/stylelint.vim | 20 - pack/acp/start/ale/ale_linters/llvm/llc.vim | 24 - pack/acp/start/ale/ale_linters/lua/luac.vim | 31 - .../start/ale/ale_linters/lua/luacheck.vim | 44 - pack/acp/start/ale/ale_linters/mail/alex.vim | 4 - .../ale/ale_linters/mail/languagetool.vim | 5 - .../start/ale/ale_linters/mail/proselint.vim | 9 - pack/acp/start/ale/ale_linters/mail/vale.vim | 9 - .../start/ale/ale_linters/make/checkmake.vim | 25 - .../start/ale/ale_linters/markdown/alex.vim | 4 - .../ale/ale_linters/markdown/languagetool.vim | 5 - .../ale/ale_linters/markdown/markdownlint.vim | 11 - .../start/ale/ale_linters/markdown/mdl.vim | 44 - .../ale/ale_linters/markdown/proselint.vim | 9 - .../start/ale/ale_linters/markdown/redpen.vim | 9 - .../ale/ale_linters/markdown/remark_lint.vim | 48 - .../ale/ale_linters/markdown/textlint.vim | 9 - .../start/ale/ale_linters/markdown/vale.vim | 9 - .../ale/ale_linters/markdown/writegood.vim | 4 - .../start/ale/ale_linters/matlab/mlint.vim | 44 - .../acp/start/ale/ale_linters/mercury/mmc.vim | 40 - pack/acp/start/ale/ale_linters/nasm/nasm.vim | 42 - .../start/ale/ale_linters/nim/nimcheck.vim | 65 - pack/acp/start/ale/ale_linters/nix/nix.vim | 26 - pack/acp/start/ale/ale_linters/nroff/alex.vim | 4 - .../start/ale/ale_linters/nroff/proselint.vim | 9 - .../start/ale/ale_linters/nroff/writegood.vim | 4 - pack/acp/start/ale/ale_linters/objc/ccls.vim | 14 - pack/acp/start/ale/ale_linters/objc/clang.vim | 23 - .../acp/start/ale/ale_linters/objc/clangd.vim | 17 - .../start/ale/ale_linters/objcpp/clang.vim | 23 - .../start/ale/ale_linters/objcpp/clangd.vim | 17 - .../start/ale/ale_linters/ocaml/merlin.vim | 17 - pack/acp/start/ale/ale_linters/ocaml/ols.vim | 14 - pack/acp/start/ale/ale_linters/perl/perl.vim | 64 - .../start/ale/ale_linters/perl/perlcritic.vim | 61 - .../acp/start/ale/ale_linters/perl6/perl6.vim | 166 - .../start/ale/ale_linters/php/langserver.vim | 27 - pack/acp/start/ale/ale_linters/php/phan.vim | 73 - pack/acp/start/ale/ale_linters/php/php.vim | 39 - pack/acp/start/ale/ale_linters/php/phpcs.vim | 54 - pack/acp/start/ale/ale_linters/php/phpmd.vim | 38 - .../acp/start/ale/ale_linters/php/phpstan.vim | 74 - pack/acp/start/ale/ale_linters/php/psalm.vim | 21 - pack/acp/start/ale/ale_linters/po/alex.vim | 4 - pack/acp/start/ale/ale_linters/po/msgfmt.vim | 30 - .../start/ale/ale_linters/po/proselint.vim | 9 - .../start/ale/ale_linters/po/writegood.vim | 4 - pack/acp/start/ale/ale_linters/pod/alex.vim | 4 - .../start/ale/ale_linters/pod/proselint.vim | 9 - .../start/ale/ale_linters/pod/writegood.vim | 4 - pack/acp/start/ale/ale_linters/pony/ponyc.vim | 16 - .../ale/ale_linters/powershell/powershell.vim | 91 - .../powershell/psscriptanalyzer.vim | 76 - .../start/ale/ale_linters/prolog/swipl.vim | 100 - .../ale/ale_linters/proto/protoc_gen_lint.vim | 27 - .../acp/start/ale/ale_linters/pug/puglint.vim | 56 - .../ale/ale_linters/puppet/languageserver.vim | 37 - .../start/ale/ale_linters/puppet/puppet.vim | 37 - .../ale/ale_linters/puppet/puppetlint.vim | 18 - .../start/ale/ale_linters/pyrex/cython.vim | 38 - .../start/ale/ale_linters/python/bandit.vim | 68 - .../start/ale/ale_linters/python/flake8.vim | 146 - .../acp/start/ale/ale_linters/python/mypy.vim | 81 - .../ale/ale_linters/python/prospector.vim | 100 - .../ale/ale_linters/python/pycodestyle.vim | 75 - .../ale/ale_linters/python/pydocstyle.vim | 73 - .../start/ale/ale_linters/python/pyflakes.vim | 50 - .../start/ale/ale_linters/python/pylama.vim | 92 - .../start/ale/ale_linters/python/pylint.vim | 92 - .../acp/start/ale/ale_linters/python/pyls.vim | 36 - .../acp/start/ale/ale_linters/python/pyre.vim | 34 - .../start/ale/ale_linters/python/vulture.vim | 80 - pack/acp/start/ale/ale_linters/qml/qmlfmt.vim | 25 - .../acp/start/ale/ale_linters/qml/qmllint.vim | 29 - pack/acp/start/ale/ale_linters/r/lintr.vim | 35 - .../acp/start/ale/ale_linters/racket/raco.vim | 33 - pack/acp/start/ale/ale_linters/reason/ls.vim | 23 - .../start/ale/ale_linters/reason/merlin.vim | 17 - pack/acp/start/ale/ale_linters/reason/ols.vim | 14 - .../start/ale/ale_linters/review/redpen.vim | 9 - pack/acp/start/ale/ale_linters/rst/alex.vim | 4 - .../start/ale/ale_linters/rst/proselint.vim | 9 - pack/acp/start/ale/ale_linters/rst/redpen.vim | 9 - .../start/ale/ale_linters/rst/rstcheck.vim | 38 - .../start/ale/ale_linters/rst/textlint.vim | 9 - pack/acp/start/ale/ale_linters/rst/vale.vim | 9 - .../start/ale/ale_linters/rst/writegood.vim | 4 - .../start/ale/ale_linters/ruby/brakeman.vim | 51 - .../ale_linters/ruby/rails_best_practices.vim | 49 - pack/acp/start/ale/ale_linters/ruby/reek.vim | 65 - .../start/ale/ale_linters/ruby/rubocop.vim | 31 - pack/acp/start/ale/ale_linters/ruby/ruby.vim | 12 - .../start/ale/ale_linters/ruby/solargraph.vim | 22 - .../start/ale/ale_linters/ruby/standardrb.vim | 23 - pack/acp/start/ale/ale_linters/rust/cargo.vim | 98 - pack/acp/start/ale/ale_linters/rust/rls.vim | 27 - pack/acp/start/ale/ale_linters/rust/rustc.vim | 33 - .../start/ale/ale_linters/sass/sasslint.vim | 28 - .../start/ale/ale_linters/sass/stylelint.vim | 13 - pack/acp/start/ale/ale_linters/scala/fsc.vim | 14 - .../start/ale/ale_linters/scala/sbtserver.vim | 31 - .../start/ale/ale_linters/scala/scalac.vim | 15 - .../ale/ale_linters/scala/scalastyle.vim | 86 - .../start/ale/ale_linters/scss/sasslint.vim | 28 - .../start/ale/ale_linters/scss/scsslint.vim | 34 - .../start/ale/ale_linters/scss/stylelint.vim | 19 - .../ale/ale_linters/sh/language_server.vim | 32 - pack/acp/start/ale/ale_linters/sh/shell.vim | 57 - .../start/ale/ale_linters/sh/shellcheck.vim | 107 - .../start/ale/ale_linters/slim/slimlint.vim | 55 - pack/acp/start/ale/ale_linters/sml/smlnj.vim | 9 - .../start/ale/ale_linters/sml/smlnj_cm.vim | 21 - .../ale/ale_linters/solidity/solhint.vim | 29 - .../start/ale/ale_linters/solidity/solium.vim | 9 - .../start/ale/ale_linters/spec/rpmlint.vim | 78 - pack/acp/start/ale/ale_linters/sql/sqlint.vim | 28 - .../ale/ale_linters/stylus/stylelint.vim | 20 - .../ale/ale_linters/sugarss/stylelint.vim | 21 - .../ale/ale_linters/swift/sourcekitlsp.vim | 13 - .../start/ale/ale_linters/swift/swiftlint.vim | 69 - .../start/ale/ale_linters/tcl/nagelfar.vim | 39 - .../ale/ale_linters/terraform/terraform.vim | 49 - .../ale/ale_linters/terraform/tflint.vim | 58 - .../ale/ale_linters/testft/testlinter.vim | 10 - pack/acp/start/ale/ale_linters/tex/alex.vim | 4 - pack/acp/start/ale/ale_linters/tex/chktex.vim | 54 - .../acp/start/ale/ale_linters/tex/lacheck.vim | 43 - .../start/ale/ale_linters/tex/proselint.vim | 9 - pack/acp/start/ale/ale_linters/tex/redpen.vim | 9 - pack/acp/start/ale/ale_linters/tex/texlab.vim | 21 - .../start/ale/ale_linters/tex/textlint.vim | 9 - pack/acp/start/ale/ale_linters/tex/vale.vim | 9 - .../start/ale/ale_linters/tex/writegood.vim | 4 - .../start/ale/ale_linters/texinfo/alex.vim | 4 - .../ale/ale_linters/texinfo/proselint.vim | 9 - .../ale/ale_linters/texinfo/writegood.vim | 4 - pack/acp/start/ale/ale_linters/text/alex.vim | 4 - .../ale/ale_linters/text/languagetool.vim | 4 - .../start/ale/ale_linters/text/proselint.vim | 9 - .../acp/start/ale/ale_linters/text/redpen.vim | 9 - .../start/ale/ale_linters/text/textlint.vim | 9 - pack/acp/start/ale/ale_linters/text/vale.vim | 9 - .../start/ale/ale_linters/text/writegood.vim | 4 - .../start/ale/ale_linters/thrift/thrift.vim | 87 - .../ale/ale_linters/typescript/eslint.vim | 9 - .../ale/ale_linters/typescript/tslint.vim | 75 - .../ale/ale_linters/typescript/tsserver.vim | 17 - .../ale/ale_linters/typescript/typecheck.vim | 33 - .../start/ale/ale_linters/typescript/xo.vim | 23 - .../ale/ale_linters/verilog/iverilog.vim | 43 - .../ale/ale_linters/verilog/verilator.vim | 59 - .../start/ale/ale_linters/verilog/vlog.vim | 36 - .../start/ale/ale_linters/verilog/xvlog.vim | 35 - pack/acp/start/ale/ale_linters/vhdl/ghdl.vim | 37 - pack/acp/start/ale/ale_linters/vhdl/vcom.vim | 38 - pack/acp/start/ale/ale_linters/vhdl/xvhdl.vim | 37 - .../vim/ale_custom_linting_rules.vim | 65 - pack/acp/start/ale/ale_linters/vim/vint.vim | 60 - pack/acp/start/ale/ale_linters/vue/vls.vim | 22 - pack/acp/start/ale/ale_linters/xhtml/alex.vim | 4 - .../start/ale/ale_linters/xhtml/proselint.vim | 9 - .../start/ale/ale_linters/xhtml/writegood.vim | 4 - .../acp/start/ale/ale_linters/xml/xmllint.vim | 65 - .../start/ale/ale_linters/yaml/swaglint.vim | 40 - .../start/ale/ale_linters/yaml/yamllint.vim | 50 - .../start/ale/ale_linters/yang/yang_lsp.vim | 15 - pack/acp/start/ale/autoload/ale.vim | 261 -- pack/acp/start/ale/autoload/ale/ant.vim | 41 - pack/acp/start/ale/autoload/ale/args.vim | 43 - pack/acp/start/ale/autoload/ale/assert.vim | 331 -- pack/acp/start/ale/autoload/ale/balloon.vim | 58 - pack/acp/start/ale/autoload/ale/c.vim | 395 -- pack/acp/start/ale/autoload/ale/command.vim | 379 -- .../acp/start/ale/autoload/ale/completion.vim | 697 ---- .../ale/autoload/ale/completion/python.vim | 3 - pack/acp/start/ale/autoload/ale/cursor.vim | 167 - pack/acp/start/ale/autoload/ale/d.vim | 16 - pack/acp/start/ale/autoload/ale/debugging.vim | 264 -- .../acp/start/ale/autoload/ale/definition.vim | 156 - pack/acp/start/ale/autoload/ale/engine.vim | 733 ---- .../start/ale/autoload/ale/engine/ignore.vim | 50 - pack/acp/start/ale/autoload/ale/events.vim | 155 - pack/acp/start/ale/autoload/ale/filetypes.vim | 60 - pack/acp/start/ale/autoload/ale/fix.vim | 416 -- .../start/ale/autoload/ale/fix/registry.vim | 524 --- .../ale/autoload/ale/fixers/autopep8.vim | 26 - .../ale/autoload/ale/fixers/bibclean.vim | 15 - .../start/ale/autoload/ale/fixers/black.vim | 37 - .../ale/autoload/ale/fixers/brittany.vim | 22 - .../ale/autoload/ale/fixers/clangformat.vim | 22 - .../ale/autoload/ale/fixers/cmakeformat.vim | 18 - .../start/ale/autoload/ale/fixers/dartfmt.vim | 18 - .../ale/autoload/ale/fixers/elm_format.vim | 23 - .../start/ale/autoload/ale/fixers/eslint.vim | 80 - .../start/ale/autoload/ale/fixers/fecs.vim | 17 - .../start/ale/autoload/ale/fixers/fixjson.vim | 28 - .../ale/autoload/ale/fixers/floskell.vim | 20 - .../start/ale/autoload/ale/fixers/generic.vim | 25 - .../autoload/ale/fixers/generic_python.vim | 75 - .../start/ale/autoload/ale/fixers/gofmt.vim | 18 - .../ale/autoload/ale/fixers/goimports.vim | 22 - .../start/ale/autoload/ale/fixers/gomod.vim | 10 - .../ale/fixers/google_java_format.vim | 23 - .../start/ale/autoload/ale/fixers/hackfmt.vim | 18 - .../start/ale/autoload/ale/fixers/help.vim | 24 - .../start/ale/autoload/ale/fixers/hfmt.vim | 16 - .../start/ale/autoload/ale/fixers/hlint.vim | 13 - .../ale/autoload/ale/fixers/importjs.vim | 25 - .../start/ale/autoload/ale/fixers/isort.vim | 25 - pack/acp/start/ale/autoload/ale/fixers/jq.vim | 22 - .../start/ale/autoload/ale/fixers/ktlint.vim | 9 - .../ale/autoload/ale/fixers/latexindent.vim | 18 - .../ale/autoload/ale/fixers/mix_format.vim | 25 - .../ale/autoload/ale/fixers/ocamlformat.vim | 18 - .../ale/autoload/ale/fixers/ocp_indent.vim | 18 - .../ale/autoload/ale/fixers/perltidy.vim | 18 - .../ale/autoload/ale/fixers/pgformatter.vim | 12 - .../ale/autoload/ale/fixers/php_cs_fixer.vim | 24 - .../start/ale/autoload/ale/fixers/phpcbf.vim | 25 - .../ale/autoload/ale/fixers/prettier.vim | 108 - .../autoload/ale/fixers/prettier_eslint.vim | 56 - .../autoload/ale/fixers/prettier_standard.vim | 24 - .../ale/autoload/ale/fixers/puppetlint.vim | 22 - .../start/ale/autoload/ale/fixers/qmlfmt.vim | 11 - .../start/ale/autoload/ale/fixers/refmt.vim | 18 - .../ale/fixers/reorder_python_imports.vim | 25 - .../start/ale/autoload/ale/fixers/rubocop.vim | 20 - .../start/ale/autoload/ale/fixers/rufo.vim | 20 - .../start/ale/autoload/ale/fixers/rustfmt.vim | 15 - .../ale/autoload/ale/fixers/scalafmt.vim | 25 - .../start/ale/autoload/ale/fixers/shfmt.vim | 31 - .../start/ale/autoload/ale/fixers/sqlfmt.vim | 13 - .../ale/autoload/ale/fixers/standard.vim | 25 - .../ale/autoload/ale/fixers/standardrb.vim | 23 - .../ale/autoload/ale/fixers/stylelint.vim | 22 - .../start/ale/autoload/ale/fixers/styler.vim | 16 - .../autoload/ale/fixers/stylish_haskell.vim | 21 - .../ale/autoload/ale/fixers/swiftformat.vim | 25 - .../ale/autoload/ale/fixers/terraform.vim | 17 - .../ale/autoload/ale/fixers/textlint.vim | 15 - .../start/ale/autoload/ale/fixers/tidy.vim | 26 - .../start/ale/autoload/ale/fixers/tslint.vim | 22 - .../ale/autoload/ale/fixers/uncrustify.vim | 16 - .../start/ale/autoload/ale/fixers/xmllint.vim | 29 - pack/acp/start/ale/autoload/ale/fixers/xo.vim | 23 - .../start/ale/autoload/ale/fixers/yapf.vim | 26 - pack/acp/start/ale/autoload/ale/go.vim | 27 - pack/acp/start/ale/autoload/ale/gradle.vim | 67 - .../start/ale/autoload/ale/gradle/init.gradle | 23 - .../start/ale/autoload/ale/handlers/alex.vim | 54 - .../start/ale/autoload/ale/handlers/ccls.vim | 19 - .../ale/autoload/ale/handlers/cppcheck.vim | 62 - .../ale/autoload/ale/handlers/cpplint.vim | 21 - .../start/ale/autoload/ale/handlers/css.vim | 70 - .../ale/autoload/ale/handlers/elixir.vim | 28 - .../ale/autoload/ale/handlers/eslint.vim | 246 -- .../start/ale/autoload/ale/handlers/fecs.vim | 52 - .../ale/autoload/ale/handlers/flawfinder.vim | 48 - .../start/ale/autoload/ale/handlers/gawk.vim | 27 - .../start/ale/autoload/ale/handlers/gcc.vim | 159 - .../start/ale/autoload/ale/handlers/go.vim | 26 - .../ale/autoload/ale/handlers/haskell.vim | 101 - .../autoload/ale/handlers/haskell_stack.vim | 7 - .../start/ale/autoload/ale/handlers/hlint.vim | 8 - .../ale/autoload/ale/handlers/ktlint.vim | 45 - .../autoload/ale/handlers/languagetool.vim | 74 - .../autoload/ale/handlers/markdownlint.vim | 17 - .../start/ale/autoload/ale/handlers/ols.vim | 26 - .../start/ale/autoload/ale/handlers/pony.vim | 33 - .../ale/autoload/ale/handlers/redpen.vim | 65 - .../start/ale/autoload/ale/handlers/ruby.vim | 46 - .../start/ale/autoload/ale/handlers/rust.vim | 78 - .../start/ale/autoload/ale/handlers/scala.vim | 37 - .../start/ale/autoload/ale/handlers/sh.vim | 20 - .../start/ale/autoload/ale/handlers/sml.vim | 93 - .../ale/autoload/ale/handlers/textlint.vim | 39 - .../ale/autoload/ale/handlers/tslint.vim | 13 - .../ale/autoload/ale/handlers/tsserver.vim | 8 - .../start/ale/autoload/ale/handlers/unix.vim | 26 - .../start/ale/autoload/ale/handlers/vale.vim | 39 - .../ale/autoload/ale/handlers/writegood.vim | 72 - pack/acp/start/ale/autoload/ale/highlight.vim | 159 - pack/acp/start/ale/autoload/ale/history.vim | 62 - pack/acp/start/ale/autoload/ale/hover.vim | 189 - pack/acp/start/ale/autoload/ale/java.vim | 26 - pack/acp/start/ale/autoload/ale/job.vim | 373 -- pack/acp/start/ale/autoload/ale/julia.vim | 19 - pack/acp/start/ale/autoload/ale/linter.vim | 551 --- pack/acp/start/ale/autoload/ale/list.vim | 197 - .../ale/autoload/ale/loclist_jumping.vim | 163 - pack/acp/start/ale/autoload/ale/lsp.vim | 631 --- .../start/ale/autoload/ale/lsp/message.vim | 164 - pack/acp/start/ale/autoload/ale/lsp/reset.vim | 25 - .../start/ale/autoload/ale/lsp/response.vim | 151 - .../ale/autoload/ale/lsp/tsserver_message.vim | 79 - .../acp/start/ale/autoload/ale/lsp_linter.vim | 466 --- pack/acp/start/ale/autoload/ale/node.vim | 42 - .../start/ale/autoload/ale/other_source.vim | 21 - pack/acp/start/ale/autoload/ale/path.vim | 224 -- .../ale/autoload/ale/pattern_options.vim | 47 - .../acp/start/ale/autoload/ale/powershell.vim | 32 - pack/acp/start/ale/autoload/ale/preview.vim | 98 - pack/acp/start/ale/autoload/ale/python.vim | 157 - .../acp/start/ale/autoload/ale/references.vim | 127 - pack/acp/start/ale/autoload/ale/ruby.vim | 76 - pack/acp/start/ale/autoload/ale/semver.vim | 78 - pack/acp/start/ale/autoload/ale/sign.vim | 388 -- pack/acp/start/ale/autoload/ale/socket.vim | 152 - .../acp/start/ale/autoload/ale/statusline.vim | 135 - pack/acp/start/ale/autoload/ale/swift.vim | 13 - pack/acp/start/ale/autoload/ale/symbol.vim | 110 - pack/acp/start/ale/autoload/ale/test.vim | 187 - pack/acp/start/ale/autoload/ale/toggle.vim | 100 - pack/acp/start/ale/autoload/ale/uri.vim | 18 - pack/acp/start/ale/autoload/ale/util.vim | 479 --- .../start/ale/autoload/ale/virtualtext.vim | 135 - pack/acp/start/ale/doc/ale-ada.txt | 25 - pack/acp/start/ale/doc/ale-ansible.txt | 16 - pack/acp/start/ale/doc/ale-asciidoc.txt | 18 - pack/acp/start/ale/doc/ale-asm.txt | 25 - pack/acp/start/ale/doc/ale-awk.txt | 25 - pack/acp/start/ale/doc/ale-bib.txt | 19 - pack/acp/start/ale/doc/ale-c.txt | 324 -- pack/acp/start/ale/doc/ale-chef.txt | 46 - pack/acp/start/ale/doc/ale-clojure.txt | 28 - pack/acp/start/ale/doc/ale-cloudformation.txt | 14 - pack/acp/start/ale/doc/ale-cmake.txt | 43 - pack/acp/start/ale/doc/ale-cpp.txt | 322 -- pack/acp/start/ale/doc/ale-cs.txt | 112 - pack/acp/start/ale/doc/ale-css.txt | 47 - pack/acp/start/ale/doc/ale-cuda.txt | 32 - pack/acp/start/ale/doc/ale-d.txt | 23 - pack/acp/start/ale/doc/ale-dart.txt | 71 - pack/acp/start/ale/doc/ale-development.txt | 358 -- pack/acp/start/ale/doc/ale-dockerfile.txt | 60 - pack/acp/start/ale/doc/ale-elixir.txt | 89 - pack/acp/start/ale/doc/ale-elm.txt | 68 - pack/acp/start/ale/doc/ale-erlang.txt | 58 - pack/acp/start/ale/doc/ale-eruby.txt | 37 - pack/acp/start/ale/doc/ale-fish.txt | 14 - pack/acp/start/ale/doc/ale-fortran.txt | 55 - pack/acp/start/ale/doc/ale-fountain.txt | 6 - pack/acp/start/ale/doc/ale-fuse.txt | 25 - pack/acp/start/ale/doc/ale-gitcommit.txt | 44 - pack/acp/start/ale/doc/ale-glsl.txt | 56 - pack/acp/start/ale/doc/ale-go.txt | 234 -- pack/acp/start/ale/doc/ale-graphql.txt | 22 - pack/acp/start/ale/doc/ale-hack.txt | 51 - pack/acp/start/ale/doc/ale-handlebars.txt | 25 - pack/acp/start/ale/doc/ale-haskell.txt | 154 - pack/acp/start/ale/doc/ale-hcl.txt | 11 - pack/acp/start/ale/doc/ale-html.txt | 130 - pack/acp/start/ale/doc/ale-idris.txt | 23 - pack/acp/start/ale/doc/ale-ispc.txt | 24 - pack/acp/start/ale/doc/ale-java.txt | 206 - pack/acp/start/ale/doc/ale-javascript.txt | 336 -- pack/acp/start/ale/doc/ale-json.txt | 105 - pack/acp/start/ale/doc/ale-julia.txt | 20 - pack/acp/start/ale/doc/ale-kotlin.txt | 113 - pack/acp/start/ale/doc/ale-latex.txt | 18 - pack/acp/start/ale/doc/ale-less.txt | 66 - pack/acp/start/ale/doc/ale-llvm.txt | 19 - pack/acp/start/ale/doc/ale-lua.txt | 34 - pack/acp/start/ale/doc/ale-markdown.txt | 71 - pack/acp/start/ale/doc/ale-mercury.txt | 26 - pack/acp/start/ale/doc/ale-nasm.txt | 26 - pack/acp/start/ale/doc/ale-nroff.txt | 12 - pack/acp/start/ale/doc/ale-objc.txt | 73 - pack/acp/start/ale/doc/ale-objcpp.txt | 42 - pack/acp/start/ale/doc/ale-ocaml.txt | 82 - pack/acp/start/ale/doc/ale-pawn.txt | 12 - pack/acp/start/ale/doc/ale-perl.txt | 91 - pack/acp/start/ale/doc/ale-perl6.txt | 43 - pack/acp/start/ale/doc/ale-php.txt | 227 -- pack/acp/start/ale/doc/ale-po.txt | 12 - pack/acp/start/ale/doc/ale-pod.txt | 12 - pack/acp/start/ale/doc/ale-pony.txt | 25 - pack/acp/start/ale/doc/ale-powershell.txt | 77 - pack/acp/start/ale/doc/ale-prolog.txt | 56 - pack/acp/start/ale/doc/ale-proto.txt | 33 - pack/acp/start/ale/doc/ale-pug.txt | 44 - pack/acp/start/ale/doc/ale-puppet.txt | 57 - pack/acp/start/ale/doc/ale-pyrex.txt | 25 - pack/acp/start/ale/doc/ale-python.txt | 764 ---- pack/acp/start/ale/doc/ale-qml.txt | 18 - pack/acp/start/ale/doc/ale-r.txt | 45 - pack/acp/start/ale/doc/ale-reasonml.txt | 76 - .../start/ale/doc/ale-restructuredtext.txt | 26 - pack/acp/start/ale/doc/ale-ruby.txt | 155 - pack/acp/start/ale/doc/ale-rust.txt | 248 -- pack/acp/start/ale/doc/ale-sass.txt | 31 - pack/acp/start/ale/doc/ale-scala.txt | 98 - pack/acp/start/ale/doc/ale-scss.txt | 64 - pack/acp/start/ale/doc/ale-sh.txt | 115 - pack/acp/start/ale/doc/ale-sml.txt | 36 - pack/acp/start/ale/doc/ale-solidity.txt | 24 - pack/acp/start/ale/doc/ale-spec.txt | 43 - pack/acp/start/ale/doc/ale-sql.txt | 43 - pack/acp/start/ale/doc/ale-stylus.txt | 33 - pack/acp/start/ale/doc/ale-sugarss.txt | 31 - .../doc/ale-supported-languages-and-tools.txt | 488 --- pack/acp/start/ale/doc/ale-swift.txt | 21 - pack/acp/start/ale/doc/ale-tcl.txt | 25 - pack/acp/start/ale/doc/ale-terraform.txt | 59 - pack/acp/start/ale/doc/ale-tex.txt | 77 - pack/acp/start/ale/doc/ale-texinfo.txt | 12 - pack/acp/start/ale/doc/ale-text.txt | 42 - pack/acp/start/ale/doc/ale-thrift.txt | 46 - pack/acp/start/ale/doc/ale-typescript.txt | 115 - pack/acp/start/ale/doc/ale-vala.txt | 12 - pack/acp/start/ale/doc/ale-verilog.txt | 102 - pack/acp/start/ale/doc/ale-vhdl.txt | 92 - pack/acp/start/ale/doc/ale-vim-help.txt | 12 - pack/acp/start/ale/doc/ale-vim.txt | 27 - pack/acp/start/ale/doc/ale-vue.txt | 31 - pack/acp/start/ale/doc/ale-xhtml.txt | 12 - pack/acp/start/ale/doc/ale-xml.txt | 34 - pack/acp/start/ale/doc/ale-yaml.txt | 92 - pack/acp/start/ale/doc/ale-yang.txt | 17 - pack/acp/start/ale/doc/ale.txt | 3378 ----------------- .../start/ale/ftplugin/ale-fix-suggest.vim | 2 - .../ale/ftplugin/ale-preview-selection.vim | 16 - pack/acp/start/ale/ftplugin/ale-preview.vim | 2 - pack/acp/start/ale/plugin/ale.vim | 274 -- .../rplugin/python3/deoplete/sources/ale.py | 54 - pack/acp/start/ale/supported-tools.md | 497 --- pack/acp/start/ale/syntax/ale-fix-suggest.vim | 13 - .../ale/syntax/ale-preview-selection.vim | 11 - pack/acp/start/vimoutliner/.gitignore | 16 - pack/acp/start/vimoutliner/CHANGELOG | 1556 -------- pack/acp/start/vimoutliner/INSTALL | 137 - pack/acp/start/vimoutliner/LICENSE | 11 - pack/acp/start/vimoutliner/README | 81 - pack/acp/start/vimoutliner/README.detailed | 1 - pack/acp/start/vimoutliner/TODO.otl | 27 - .../start/vimoutliner/colors/votl_dark.vim | 81 - .../start/vimoutliner/colors/votl_light.vim | 81 - .../start/vimoutliner/colors/votl_test.vim | 81 - pack/acp/start/vimoutliner/doc/votl.txt | 1331 ------- .../start/vimoutliner/doc/votl_cheatsheet.txt | 85 - pack/acp/start/vimoutliner/ftdetect/votl.vim | 26 - pack/acp/start/vimoutliner/ftplugin/votl.vim | 679 ---- pack/acp/start/vimoutliner/install.sh | 173 - pack/acp/start/vimoutliner/syntax/votl.vim | 248 -- .../vimoutliner/images/Vimoutliner_logo.png | Bin 19060 -> 0 bytes .../images/Vimoutliner_logo_tiny.png | Bin 7036 -> 0 bytes .../vimoutliner/images/favicon.ico | Bin 318 -> 0 bytes .../vimoutliner/plugin/prev/votl_hoist.otl | 77 - .../vimoutliner/plugin/prev/votl_hoist.vim | 251 -- .../vimoutliner/plugin/votl_checkbox.otl | 310 -- .../vimoutliner/plugin/votl_checkbox.vim | 475 --- .../vimoutliner/plugin/votl_clock.vim | 139 - .../vimoutliner/plugin/votl_format.vim | 157 - .../vimoutliner/plugin/votl_gtd.vim | 219 -- .../vimoutliner/plugin/votl_math.otl | 56 - .../vimoutliner/plugin/votl_math.vim | 286 -- .../vimoutliner/plugin/votl_newhoist.vim | 456 --- .../vimoutliner/plugin/votl_smart_paste.vim | 117 - .../vimoutliner/plugin/votl_tags.vim | 246 -- .../vimoutliner/scripts/MediaWiki2otl | 17 - .../vimoutliner/scripts/MediaWiki2otl.desc | 37 - .../vimoutliner/scripts/Node/COPYING | 118 - .../vimoutliner/scripts/Node/COPYING.GPL | 340 -- .../scripts/Node/COPYING.LPDTL.1.0 | 118 - .../vimoutliner/scripts/Node/INSTALL | 23 - .../scripts/Node/LPDTL_discuss.txt | 26 - .../vimoutliner/scripts/Node/Node.pm | 475 --- .../vimoutliner/scripts/Node/README.otl | 177 - .../vimoutliner/scripts/Node/deletetest.otl | 18 - .../scripts/Node/example_attribs.pl | 162 - .../scripts/Node/example_bylevel.pl | 227 -- .../scripts/Node/example_delete.pl | 107 - .../vimoutliner/scripts/Node/example_hello.pl | 15 - .../scripts/Node/example_insert.pl | 550 --- .../scripts/Node/example_nodepath.pl | 135 - .../scripts/Node/example_otl2markup.pl | 123 - .../vimoutliner/scripts/Node/example_parse.pl | 114 - .../vimoutliner/scripts/Node/myapp.cfg | 4 - .../vimoutliner/vimoutliner/scripts/fs2otl | 7 - .../vimoutliner/scripts/otl2aft.awk | 284 -- .../vimoutliner/scripts/otl2aft.pdf | Bin 82163 -> 0 bytes .../vimoutliner/scripts/otl2docbook.pl | 270 -- .../vimoutliner/scripts/otl2html.py | 1111 ------ .../scripts/otl2html_autonumbered.css | 269 -- .../vimoutliner/scripts/otl2html_nnnnnn.css | 246 -- .../vimoutliner/scripts/otl2latex/.vimrc | 44 - .../vimoutliner/scripts/otl2latex/README | 23 - .../scripts/otl2latex/otl2latex.otl | 95 - .../scripts/otl2latex/otl2latex.pdf | Bin 102839 -> 0 bytes .../scripts/otl2latex/otl2latex.png | Bin 42112 -> 0 bytes .../scripts/otl2latex/otl2latex.py | 315 -- .../scripts/otl2latex/otl2latex.tex | 223 -- .../scripts/otl2latex/otl2latex.toc | 9 - .../vimoutliner/scripts/otl2lyx.awk | 149 - .../vimoutliner/scripts/otl2ooimpress.py | 263 -- .../vimoutliner/scripts/otl2ooimpress.sh | 34 - .../vimoutliner/scripts/otl2table.py | 199 - .../vimoutliner/scripts/otl2tags.py | 713 ---- .../scripts/otl2tags_freemind.conf | 96 - .../scripts/otl2tags_graphviz.conf | 104 - .../scripts/otl_handler/Apache/OTL.pm | 324 -- .../vimoutliner/scripts/otl_handler/README | 155 - .../scripts/otl_handler/devel-mode | 5 - .../scripts/otl_handler/javascript/jquery.js | 12 - .../scripts/otl_handler/javascript/theme2.js | 38 - .../scripts/otl_handler/javascript/theme3.js | 22 - .../scripts/otl_handler/sample.otl | 39 - .../scripts/otl_handler/styles/theme1.css | 88 - .../scripts/otl_handler/styles/theme2.css | 152 - .../scripts/otl_handler/styles/theme3.css | 109 - .../vimoutliner/scripts/otlgrep.py | 212 -- .../vimoutliner/scripts/otlhead.sh | 12 - .../vimoutliner/scripts/otlsplit.py | 191 - .../vimoutliner/scripts/otltail.sh | 15 - .../scripts/outline_calendar/2005.otl | 1472 ------- .../scripts/outline_calendar/vimrc | 31 - .../outline_calendar/vo_calendar_ctags.conf | 9 - .../outline_calendar/vo_calendar_generator.rb | 110 - .../outline_calendar/vo_calendar_readme.otl | 195 - .../outline_calendar/vo_calendar_shelf.otl | 6 - .../outline_calendar/vo_calendar_ui.sh | 39 - .../scripts/outline_freemind/freemind.py | 198 - .../outline_freemind/freemind_outline.py | 48 - .../scripts/outline_freemind/otl.py | 26 - .../outline_freemind/outline_freemind.py | 114 - .../scripts/outline_freemind/test.otl | 27 - .../scripts/outline_freemind/test.sh | 10 - .../vimoutliner/scripts/vo2html.rb | 329 -- .../vimoutliner/vimoutliner/scripts/vo2odp.rb | 415 -- .../vimoutliner/vimoutliner/scripts/vo2xo.rb | 239 -- .../vimoutliner/scripts/votl_maketags.1 | 50 - .../vimoutliner/scripts/votl_maketags.pl | 338 -- pack/acp/start/vimoutliner/vimoutlinerrc | 67 - plugins.md | 3 +- 672 files changed, 1 insertion(+), 56529 deletions(-) delete mode 100644 pack/acp/start/ale/LICENSE delete mode 100644 pack/acp/start/ale/ale_linters/ada/gcc.vim delete mode 100644 pack/acp/start/ale/ale_linters/ansible/ansible_lint.vim delete mode 100644 pack/acp/start/ale/ale_linters/apiblueprint/drafter.vim delete mode 100644 pack/acp/start/ale/ale_linters/asciidoc/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/asciidoc/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/asciidoc/redpen.vim delete mode 100644 pack/acp/start/ale/ale_linters/asciidoc/textlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/asciidoc/vale.vim delete mode 100644 pack/acp/start/ale/ale_linters/asciidoc/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/asm/gcc.vim delete mode 100644 pack/acp/start/ale/ale_linters/awk/gawk.vim delete mode 100644 pack/acp/start/ale/ale_linters/bib/bibclean.vim delete mode 100644 pack/acp/start/ale/ale_linters/c/ccls.vim delete mode 100644 pack/acp/start/ale/ale_linters/c/clang.vim delete mode 100644 pack/acp/start/ale/ale_linters/c/clangd.vim delete mode 100644 pack/acp/start/ale/ale_linters/c/clangtidy.vim delete mode 100644 pack/acp/start/ale/ale_linters/c/cppcheck.vim delete mode 100644 pack/acp/start/ale/ale_linters/c/cquery.vim delete mode 100644 pack/acp/start/ale/ale_linters/c/flawfinder.vim delete mode 100644 pack/acp/start/ale/ale_linters/c/gcc.vim delete mode 100644 pack/acp/start/ale/ale_linters/chef/cookstyle.vim delete mode 100644 pack/acp/start/ale/ale_linters/chef/foodcritic.vim delete mode 100644 pack/acp/start/ale/ale_linters/clojure/clj_kondo.vim delete mode 100644 pack/acp/start/ale/ale_linters/clojure/joker.vim delete mode 100644 pack/acp/start/ale/ale_linters/cloudformation/cfn_python_lint.vim delete mode 100644 pack/acp/start/ale/ale_linters/cmake/cmakelint.vim delete mode 100644 pack/acp/start/ale/ale_linters/coffee/coffee.vim delete mode 100644 pack/acp/start/ale/ale_linters/coffee/coffeelint.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/ccls.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/clang.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/clangcheck.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/clangd.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/clangtidy.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/clazy.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/cppcheck.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/cpplint.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/cquery.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/flawfinder.vim delete mode 100644 pack/acp/start/ale/ale_linters/cpp/gcc.vim delete mode 100644 pack/acp/start/ale/ale_linters/crystal/ameba.vim delete mode 100644 pack/acp/start/ale/ale_linters/crystal/crystal.vim delete mode 100644 pack/acp/start/ale/ale_linters/cs/mcs.vim delete mode 100644 pack/acp/start/ale/ale_linters/cs/mcsc.vim delete mode 100644 pack/acp/start/ale/ale_linters/css/csslint.vim delete mode 100644 pack/acp/start/ale/ale_linters/css/fecs.vim delete mode 100644 pack/acp/start/ale/ale_linters/css/stylelint.vim delete mode 100644 pack/acp/start/ale/ale_linters/cucumber/cucumber.vim delete mode 100644 pack/acp/start/ale/ale_linters/cuda/nvcc.vim delete mode 100644 pack/acp/start/ale/ale_linters/cypher/cypher_lint.vim delete mode 100644 pack/acp/start/ale/ale_linters/d/dls.vim delete mode 100644 pack/acp/start/ale/ale_linters/d/dmd.vim delete mode 100644 pack/acp/start/ale/ale_linters/dafny/dafny.vim delete mode 100644 pack/acp/start/ale/ale_linters/dart/dartanalyzer.vim delete mode 100644 pack/acp/start/ale/ale_linters/dart/language_server.vim delete mode 100644 pack/acp/start/ale/ale_linters/dockerfile/dockerfile_lint.vim delete mode 100644 pack/acp/start/ale/ale_linters/dockerfile/hadolint.vim delete mode 100644 pack/acp/start/ale/ale_linters/elixir/credo.vim delete mode 100644 pack/acp/start/ale/ale_linters/elixir/dialyxir.vim delete mode 100644 pack/acp/start/ale/ale_linters/elixir/dogma.vim delete mode 100644 pack/acp/start/ale/ale_linters/elixir/elixir_ls.vim delete mode 100644 pack/acp/start/ale/ale_linters/elixir/mix.vim delete mode 100644 pack/acp/start/ale/ale_linters/elm/elm_lsp.vim delete mode 100644 pack/acp/start/ale/ale_linters/elm/make.vim delete mode 100644 pack/acp/start/ale/ale_linters/erlang/dialyzer.vim delete mode 100644 pack/acp/start/ale/ale_linters/erlang/erlc.vim delete mode 100644 pack/acp/start/ale/ale_linters/erlang/syntaxerl.vim delete mode 100644 pack/acp/start/ale/ale_linters/eruby/erb.vim delete mode 100644 pack/acp/start/ale/ale_linters/eruby/erubi.vim delete mode 100644 pack/acp/start/ale/ale_linters/eruby/erubis.vim delete mode 100644 pack/acp/start/ale/ale_linters/eruby/ruumba.vim delete mode 100644 pack/acp/start/ale/ale_linters/fish/fish.vim delete mode 100644 pack/acp/start/ale/ale_linters/fortran/gcc.vim delete mode 100644 pack/acp/start/ale/ale_linters/fortran/language_server.vim delete mode 100644 pack/acp/start/ale/ale_linters/fountain/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/fuse/fusionlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/gitcommit/gitlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/glsl/glslang.vim delete mode 100644 pack/acp/start/ale/ale_linters/glsl/glslls.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/bingo.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/gobuild.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/gofmt.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/golangci_lint.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/golint.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/gometalinter.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/gopls.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/gosimple.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/gotype.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/govet.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/langserver.vim delete mode 100644 pack/acp/start/ale/ale_linters/go/staticcheck.vim delete mode 100644 pack/acp/start/ale/ale_linters/graphql/eslint.vim delete mode 100644 pack/acp/start/ale/ale_linters/graphql/gqlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/hack/hack.vim delete mode 100644 pack/acp/start/ale/ale_linters/hack/hhast.vim delete mode 100644 pack/acp/start/ale/ale_linters/haml/hamllint.vim delete mode 100644 pack/acp/start/ale/ale_linters/handlebars/embertemplatelint.vim delete mode 100644 pack/acp/start/ale/ale_linters/haskell/cabal_ghc.vim delete mode 100644 pack/acp/start/ale/ale_linters/haskell/ghc.vim delete mode 100644 pack/acp/start/ale/ale_linters/haskell/ghc_mod.vim delete mode 100644 pack/acp/start/ale/ale_linters/haskell/hdevtools.vim delete mode 100644 pack/acp/start/ale/ale_linters/haskell/hie.vim delete mode 100644 pack/acp/start/ale/ale_linters/haskell/hlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/haskell/stack_build.vim delete mode 100644 pack/acp/start/ale/ale_linters/haskell/stack_ghc.vim delete mode 100644 pack/acp/start/ale/ale_linters/help/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/help/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/help/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/html/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/html/fecs.vim delete mode 100644 pack/acp/start/ale/ale_linters/html/htmlhint.vim delete mode 100644 pack/acp/start/ale/ale_linters/html/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/html/stylelint.vim delete mode 100644 pack/acp/start/ale/ale_linters/html/tidy.vim delete mode 100644 pack/acp/start/ale/ale_linters/html/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/idris/idris.vim delete mode 100644 pack/acp/start/ale/ale_linters/ispc/ispc.vim delete mode 100644 pack/acp/start/ale/ale_linters/java/checkstyle.vim delete mode 100644 pack/acp/start/ale/ale_linters/java/eclipselsp.vim delete mode 100644 pack/acp/start/ale/ale_linters/java/javac.vim delete mode 100644 pack/acp/start/ale/ale_linters/java/javalsp.vim delete mode 100644 pack/acp/start/ale/ale_linters/java/pmd.vim delete mode 100644 pack/acp/start/ale/ale_linters/javascript/eslint.vim delete mode 100644 pack/acp/start/ale/ale_linters/javascript/fecs.vim delete mode 100755 pack/acp/start/ale/ale_linters/javascript/flow.vim delete mode 100644 pack/acp/start/ale/ale_linters/javascript/flow_ls.vim delete mode 100644 pack/acp/start/ale/ale_linters/javascript/jscs.vim delete mode 100644 pack/acp/start/ale/ale_linters/javascript/jshint.vim delete mode 100644 pack/acp/start/ale/ale_linters/javascript/standard.vim delete mode 100644 pack/acp/start/ale/ale_linters/javascript/tsserver.vim delete mode 100644 pack/acp/start/ale/ale_linters/javascript/xo.vim delete mode 100644 pack/acp/start/ale/ale_linters/json/jsonlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/julia/languageserver.vim delete mode 100644 pack/acp/start/ale/ale_linters/kotlin/kotlinc.vim delete mode 100644 pack/acp/start/ale/ale_linters/kotlin/ktlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/kotlin/languageserver.vim delete mode 100755 pack/acp/start/ale/ale_linters/less/lessc.vim delete mode 100644 pack/acp/start/ale/ale_linters/less/stylelint.vim delete mode 100644 pack/acp/start/ale/ale_linters/llvm/llc.vim delete mode 100644 pack/acp/start/ale/ale_linters/lua/luac.vim delete mode 100644 pack/acp/start/ale/ale_linters/lua/luacheck.vim delete mode 100644 pack/acp/start/ale/ale_linters/mail/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/mail/languagetool.vim delete mode 100644 pack/acp/start/ale/ale_linters/mail/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/mail/vale.vim delete mode 100644 pack/acp/start/ale/ale_linters/make/checkmake.vim delete mode 100644 pack/acp/start/ale/ale_linters/markdown/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/markdown/languagetool.vim delete mode 100644 pack/acp/start/ale/ale_linters/markdown/markdownlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/markdown/mdl.vim delete mode 100644 pack/acp/start/ale/ale_linters/markdown/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/markdown/redpen.vim delete mode 100644 pack/acp/start/ale/ale_linters/markdown/remark_lint.vim delete mode 100644 pack/acp/start/ale/ale_linters/markdown/textlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/markdown/vale.vim delete mode 100644 pack/acp/start/ale/ale_linters/markdown/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/matlab/mlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/mercury/mmc.vim delete mode 100644 pack/acp/start/ale/ale_linters/nasm/nasm.vim delete mode 100644 pack/acp/start/ale/ale_linters/nim/nimcheck.vim delete mode 100644 pack/acp/start/ale/ale_linters/nix/nix.vim delete mode 100644 pack/acp/start/ale/ale_linters/nroff/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/nroff/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/nroff/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/objc/ccls.vim delete mode 100644 pack/acp/start/ale/ale_linters/objc/clang.vim delete mode 100644 pack/acp/start/ale/ale_linters/objc/clangd.vim delete mode 100644 pack/acp/start/ale/ale_linters/objcpp/clang.vim delete mode 100644 pack/acp/start/ale/ale_linters/objcpp/clangd.vim delete mode 100644 pack/acp/start/ale/ale_linters/ocaml/merlin.vim delete mode 100644 pack/acp/start/ale/ale_linters/ocaml/ols.vim delete mode 100644 pack/acp/start/ale/ale_linters/perl/perl.vim delete mode 100644 pack/acp/start/ale/ale_linters/perl/perlcritic.vim delete mode 100644 pack/acp/start/ale/ale_linters/perl6/perl6.vim delete mode 100644 pack/acp/start/ale/ale_linters/php/langserver.vim delete mode 100644 pack/acp/start/ale/ale_linters/php/phan.vim delete mode 100644 pack/acp/start/ale/ale_linters/php/php.vim delete mode 100644 pack/acp/start/ale/ale_linters/php/phpcs.vim delete mode 100644 pack/acp/start/ale/ale_linters/php/phpmd.vim delete mode 100644 pack/acp/start/ale/ale_linters/php/phpstan.vim delete mode 100644 pack/acp/start/ale/ale_linters/php/psalm.vim delete mode 100644 pack/acp/start/ale/ale_linters/po/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/po/msgfmt.vim delete mode 100644 pack/acp/start/ale/ale_linters/po/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/po/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/pod/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/pod/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/pod/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/pony/ponyc.vim delete mode 100755 pack/acp/start/ale/ale_linters/powershell/powershell.vim delete mode 100644 pack/acp/start/ale/ale_linters/powershell/psscriptanalyzer.vim delete mode 100644 pack/acp/start/ale/ale_linters/prolog/swipl.vim delete mode 100644 pack/acp/start/ale/ale_linters/proto/protoc_gen_lint.vim delete mode 100644 pack/acp/start/ale/ale_linters/pug/puglint.vim delete mode 100644 pack/acp/start/ale/ale_linters/puppet/languageserver.vim delete mode 100644 pack/acp/start/ale/ale_linters/puppet/puppet.vim delete mode 100644 pack/acp/start/ale/ale_linters/puppet/puppetlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/pyrex/cython.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/bandit.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/flake8.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/mypy.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/prospector.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/pycodestyle.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/pydocstyle.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/pyflakes.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/pylama.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/pylint.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/pyls.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/pyre.vim delete mode 100644 pack/acp/start/ale/ale_linters/python/vulture.vim delete mode 100644 pack/acp/start/ale/ale_linters/qml/qmlfmt.vim delete mode 100644 pack/acp/start/ale/ale_linters/qml/qmllint.vim delete mode 100644 pack/acp/start/ale/ale_linters/r/lintr.vim delete mode 100644 pack/acp/start/ale/ale_linters/racket/raco.vim delete mode 100644 pack/acp/start/ale/ale_linters/reason/ls.vim delete mode 100644 pack/acp/start/ale/ale_linters/reason/merlin.vim delete mode 100644 pack/acp/start/ale/ale_linters/reason/ols.vim delete mode 100644 pack/acp/start/ale/ale_linters/review/redpen.vim delete mode 100644 pack/acp/start/ale/ale_linters/rst/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/rst/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/rst/redpen.vim delete mode 100644 pack/acp/start/ale/ale_linters/rst/rstcheck.vim delete mode 100644 pack/acp/start/ale/ale_linters/rst/textlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/rst/vale.vim delete mode 100644 pack/acp/start/ale/ale_linters/rst/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/ruby/brakeman.vim delete mode 100644 pack/acp/start/ale/ale_linters/ruby/rails_best_practices.vim delete mode 100644 pack/acp/start/ale/ale_linters/ruby/reek.vim delete mode 100644 pack/acp/start/ale/ale_linters/ruby/rubocop.vim delete mode 100644 pack/acp/start/ale/ale_linters/ruby/ruby.vim delete mode 100644 pack/acp/start/ale/ale_linters/ruby/solargraph.vim delete mode 100644 pack/acp/start/ale/ale_linters/ruby/standardrb.vim delete mode 100644 pack/acp/start/ale/ale_linters/rust/cargo.vim delete mode 100644 pack/acp/start/ale/ale_linters/rust/rls.vim delete mode 100644 pack/acp/start/ale/ale_linters/rust/rustc.vim delete mode 100644 pack/acp/start/ale/ale_linters/sass/sasslint.vim delete mode 100644 pack/acp/start/ale/ale_linters/sass/stylelint.vim delete mode 100644 pack/acp/start/ale/ale_linters/scala/fsc.vim delete mode 100644 pack/acp/start/ale/ale_linters/scala/sbtserver.vim delete mode 100644 pack/acp/start/ale/ale_linters/scala/scalac.vim delete mode 100644 pack/acp/start/ale/ale_linters/scala/scalastyle.vim delete mode 100644 pack/acp/start/ale/ale_linters/scss/sasslint.vim delete mode 100644 pack/acp/start/ale/ale_linters/scss/scsslint.vim delete mode 100644 pack/acp/start/ale/ale_linters/scss/stylelint.vim delete mode 100644 pack/acp/start/ale/ale_linters/sh/language_server.vim delete mode 100644 pack/acp/start/ale/ale_linters/sh/shell.vim delete mode 100644 pack/acp/start/ale/ale_linters/sh/shellcheck.vim delete mode 100644 pack/acp/start/ale/ale_linters/slim/slimlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/sml/smlnj.vim delete mode 100644 pack/acp/start/ale/ale_linters/sml/smlnj_cm.vim delete mode 100644 pack/acp/start/ale/ale_linters/solidity/solhint.vim delete mode 100644 pack/acp/start/ale/ale_linters/solidity/solium.vim delete mode 100644 pack/acp/start/ale/ale_linters/spec/rpmlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/sql/sqlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/stylus/stylelint.vim delete mode 100644 pack/acp/start/ale/ale_linters/sugarss/stylelint.vim delete mode 100644 pack/acp/start/ale/ale_linters/swift/sourcekitlsp.vim delete mode 100644 pack/acp/start/ale/ale_linters/swift/swiftlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/tcl/nagelfar.vim delete mode 100755 pack/acp/start/ale/ale_linters/terraform/terraform.vim delete mode 100644 pack/acp/start/ale/ale_linters/terraform/tflint.vim delete mode 100644 pack/acp/start/ale/ale_linters/testft/testlinter.vim delete mode 100644 pack/acp/start/ale/ale_linters/tex/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/tex/chktex.vim delete mode 100644 pack/acp/start/ale/ale_linters/tex/lacheck.vim delete mode 100644 pack/acp/start/ale/ale_linters/tex/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/tex/redpen.vim delete mode 100644 pack/acp/start/ale/ale_linters/tex/texlab.vim delete mode 100644 pack/acp/start/ale/ale_linters/tex/textlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/tex/vale.vim delete mode 100644 pack/acp/start/ale/ale_linters/tex/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/texinfo/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/texinfo/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/texinfo/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/text/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/text/languagetool.vim delete mode 100644 pack/acp/start/ale/ale_linters/text/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/text/redpen.vim delete mode 100644 pack/acp/start/ale/ale_linters/text/textlint.vim delete mode 100644 pack/acp/start/ale/ale_linters/text/vale.vim delete mode 100644 pack/acp/start/ale/ale_linters/text/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/thrift/thrift.vim delete mode 100644 pack/acp/start/ale/ale_linters/typescript/eslint.vim delete mode 100644 pack/acp/start/ale/ale_linters/typescript/tslint.vim delete mode 100644 pack/acp/start/ale/ale_linters/typescript/tsserver.vim delete mode 100644 pack/acp/start/ale/ale_linters/typescript/typecheck.vim delete mode 100644 pack/acp/start/ale/ale_linters/typescript/xo.vim delete mode 100644 pack/acp/start/ale/ale_linters/verilog/iverilog.vim delete mode 100644 pack/acp/start/ale/ale_linters/verilog/verilator.vim delete mode 100644 pack/acp/start/ale/ale_linters/verilog/vlog.vim delete mode 100644 pack/acp/start/ale/ale_linters/verilog/xvlog.vim delete mode 100644 pack/acp/start/ale/ale_linters/vhdl/ghdl.vim delete mode 100644 pack/acp/start/ale/ale_linters/vhdl/vcom.vim delete mode 100644 pack/acp/start/ale/ale_linters/vhdl/xvhdl.vim delete mode 100644 pack/acp/start/ale/ale_linters/vim/ale_custom_linting_rules.vim delete mode 100644 pack/acp/start/ale/ale_linters/vim/vint.vim delete mode 100644 pack/acp/start/ale/ale_linters/vue/vls.vim delete mode 100644 pack/acp/start/ale/ale_linters/xhtml/alex.vim delete mode 100644 pack/acp/start/ale/ale_linters/xhtml/proselint.vim delete mode 100644 pack/acp/start/ale/ale_linters/xhtml/writegood.vim delete mode 100644 pack/acp/start/ale/ale_linters/xml/xmllint.vim delete mode 100644 pack/acp/start/ale/ale_linters/yaml/swaglint.vim delete mode 100644 pack/acp/start/ale/ale_linters/yaml/yamllint.vim delete mode 100644 pack/acp/start/ale/ale_linters/yang/yang_lsp.vim delete mode 100644 pack/acp/start/ale/autoload/ale.vim delete mode 100644 pack/acp/start/ale/autoload/ale/ant.vim delete mode 100644 pack/acp/start/ale/autoload/ale/args.vim delete mode 100644 pack/acp/start/ale/autoload/ale/assert.vim delete mode 100644 pack/acp/start/ale/autoload/ale/balloon.vim delete mode 100644 pack/acp/start/ale/autoload/ale/c.vim delete mode 100644 pack/acp/start/ale/autoload/ale/command.vim delete mode 100644 pack/acp/start/ale/autoload/ale/completion.vim delete mode 100644 pack/acp/start/ale/autoload/ale/completion/python.vim delete mode 100644 pack/acp/start/ale/autoload/ale/cursor.vim delete mode 100644 pack/acp/start/ale/autoload/ale/d.vim delete mode 100644 pack/acp/start/ale/autoload/ale/debugging.vim delete mode 100644 pack/acp/start/ale/autoload/ale/definition.vim delete mode 100644 pack/acp/start/ale/autoload/ale/engine.vim delete mode 100644 pack/acp/start/ale/autoload/ale/engine/ignore.vim delete mode 100644 pack/acp/start/ale/autoload/ale/events.vim delete mode 100644 pack/acp/start/ale/autoload/ale/filetypes.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fix.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fix/registry.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/autopep8.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/bibclean.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/black.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/brittany.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/clangformat.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/cmakeformat.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/dartfmt.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/elm_format.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/eslint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/fecs.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/fixjson.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/floskell.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/generic.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/generic_python.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/gofmt.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/goimports.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/gomod.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/google_java_format.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/hackfmt.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/help.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/hfmt.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/hlint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/importjs.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/isort.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/jq.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/ktlint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/latexindent.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/mix_format.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/ocamlformat.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/ocp_indent.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/perltidy.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/pgformatter.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/php_cs_fixer.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/phpcbf.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/prettier.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/prettier_eslint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/prettier_standard.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/puppetlint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/qmlfmt.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/refmt.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/reorder_python_imports.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/rubocop.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/rufo.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/rustfmt.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/scalafmt.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/shfmt.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/sqlfmt.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/standard.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/standardrb.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/stylelint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/styler.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/stylish_haskell.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/swiftformat.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/terraform.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/textlint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/tidy.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/tslint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/uncrustify.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/xmllint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/xo.vim delete mode 100644 pack/acp/start/ale/autoload/ale/fixers/yapf.vim delete mode 100644 pack/acp/start/ale/autoload/ale/go.vim delete mode 100644 pack/acp/start/ale/autoload/ale/gradle.vim delete mode 100644 pack/acp/start/ale/autoload/ale/gradle/init.gradle delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/alex.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/ccls.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/cppcheck.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/cpplint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/css.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/elixir.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/eslint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/fecs.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/flawfinder.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/gawk.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/gcc.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/go.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/haskell.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/haskell_stack.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/hlint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/ktlint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/languagetool.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/markdownlint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/ols.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/pony.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/redpen.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/ruby.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/rust.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/scala.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/sh.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/sml.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/textlint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/tslint.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/tsserver.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/unix.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/vale.vim delete mode 100644 pack/acp/start/ale/autoload/ale/handlers/writegood.vim delete mode 100644 pack/acp/start/ale/autoload/ale/highlight.vim delete mode 100644 pack/acp/start/ale/autoload/ale/history.vim delete mode 100644 pack/acp/start/ale/autoload/ale/hover.vim delete mode 100644 pack/acp/start/ale/autoload/ale/java.vim delete mode 100644 pack/acp/start/ale/autoload/ale/job.vim delete mode 100644 pack/acp/start/ale/autoload/ale/julia.vim delete mode 100644 pack/acp/start/ale/autoload/ale/linter.vim delete mode 100644 pack/acp/start/ale/autoload/ale/list.vim delete mode 100644 pack/acp/start/ale/autoload/ale/loclist_jumping.vim delete mode 100644 pack/acp/start/ale/autoload/ale/lsp.vim delete mode 100644 pack/acp/start/ale/autoload/ale/lsp/message.vim delete mode 100644 pack/acp/start/ale/autoload/ale/lsp/reset.vim delete mode 100644 pack/acp/start/ale/autoload/ale/lsp/response.vim delete mode 100644 pack/acp/start/ale/autoload/ale/lsp/tsserver_message.vim delete mode 100644 pack/acp/start/ale/autoload/ale/lsp_linter.vim delete mode 100644 pack/acp/start/ale/autoload/ale/node.vim delete mode 100644 pack/acp/start/ale/autoload/ale/other_source.vim delete mode 100644 pack/acp/start/ale/autoload/ale/path.vim delete mode 100644 pack/acp/start/ale/autoload/ale/pattern_options.vim delete mode 100644 pack/acp/start/ale/autoload/ale/powershell.vim delete mode 100644 pack/acp/start/ale/autoload/ale/preview.vim delete mode 100644 pack/acp/start/ale/autoload/ale/python.vim delete mode 100644 pack/acp/start/ale/autoload/ale/references.vim delete mode 100644 pack/acp/start/ale/autoload/ale/ruby.vim delete mode 100644 pack/acp/start/ale/autoload/ale/semver.vim delete mode 100644 pack/acp/start/ale/autoload/ale/sign.vim delete mode 100644 pack/acp/start/ale/autoload/ale/socket.vim delete mode 100644 pack/acp/start/ale/autoload/ale/statusline.vim delete mode 100644 pack/acp/start/ale/autoload/ale/swift.vim delete mode 100644 pack/acp/start/ale/autoload/ale/symbol.vim delete mode 100644 pack/acp/start/ale/autoload/ale/test.vim delete mode 100644 pack/acp/start/ale/autoload/ale/toggle.vim delete mode 100644 pack/acp/start/ale/autoload/ale/uri.vim delete mode 100644 pack/acp/start/ale/autoload/ale/util.vim delete mode 100644 pack/acp/start/ale/autoload/ale/virtualtext.vim delete mode 100644 pack/acp/start/ale/doc/ale-ada.txt delete mode 100644 pack/acp/start/ale/doc/ale-ansible.txt delete mode 100644 pack/acp/start/ale/doc/ale-asciidoc.txt delete mode 100644 pack/acp/start/ale/doc/ale-asm.txt delete mode 100644 pack/acp/start/ale/doc/ale-awk.txt delete mode 100644 pack/acp/start/ale/doc/ale-bib.txt delete mode 100644 pack/acp/start/ale/doc/ale-c.txt delete mode 100644 pack/acp/start/ale/doc/ale-chef.txt delete mode 100644 pack/acp/start/ale/doc/ale-clojure.txt delete mode 100644 pack/acp/start/ale/doc/ale-cloudformation.txt delete mode 100644 pack/acp/start/ale/doc/ale-cmake.txt delete mode 100644 pack/acp/start/ale/doc/ale-cpp.txt delete mode 100644 pack/acp/start/ale/doc/ale-cs.txt delete mode 100644 pack/acp/start/ale/doc/ale-css.txt delete mode 100644 pack/acp/start/ale/doc/ale-cuda.txt delete mode 100644 pack/acp/start/ale/doc/ale-d.txt delete mode 100644 pack/acp/start/ale/doc/ale-dart.txt delete mode 100644 pack/acp/start/ale/doc/ale-development.txt delete mode 100644 pack/acp/start/ale/doc/ale-dockerfile.txt delete mode 100644 pack/acp/start/ale/doc/ale-elixir.txt delete mode 100644 pack/acp/start/ale/doc/ale-elm.txt delete mode 100644 pack/acp/start/ale/doc/ale-erlang.txt delete mode 100644 pack/acp/start/ale/doc/ale-eruby.txt delete mode 100644 pack/acp/start/ale/doc/ale-fish.txt delete mode 100644 pack/acp/start/ale/doc/ale-fortran.txt delete mode 100644 pack/acp/start/ale/doc/ale-fountain.txt delete mode 100644 pack/acp/start/ale/doc/ale-fuse.txt delete mode 100644 pack/acp/start/ale/doc/ale-gitcommit.txt delete mode 100644 pack/acp/start/ale/doc/ale-glsl.txt delete mode 100644 pack/acp/start/ale/doc/ale-go.txt delete mode 100644 pack/acp/start/ale/doc/ale-graphql.txt delete mode 100644 pack/acp/start/ale/doc/ale-hack.txt delete mode 100644 pack/acp/start/ale/doc/ale-handlebars.txt delete mode 100644 pack/acp/start/ale/doc/ale-haskell.txt delete mode 100644 pack/acp/start/ale/doc/ale-hcl.txt delete mode 100644 pack/acp/start/ale/doc/ale-html.txt delete mode 100644 pack/acp/start/ale/doc/ale-idris.txt delete mode 100644 pack/acp/start/ale/doc/ale-ispc.txt delete mode 100644 pack/acp/start/ale/doc/ale-java.txt delete mode 100644 pack/acp/start/ale/doc/ale-javascript.txt delete mode 100644 pack/acp/start/ale/doc/ale-json.txt delete mode 100644 pack/acp/start/ale/doc/ale-julia.txt delete mode 100644 pack/acp/start/ale/doc/ale-kotlin.txt delete mode 100644 pack/acp/start/ale/doc/ale-latex.txt delete mode 100644 pack/acp/start/ale/doc/ale-less.txt delete mode 100644 pack/acp/start/ale/doc/ale-llvm.txt delete mode 100644 pack/acp/start/ale/doc/ale-lua.txt delete mode 100644 pack/acp/start/ale/doc/ale-markdown.txt delete mode 100644 pack/acp/start/ale/doc/ale-mercury.txt delete mode 100644 pack/acp/start/ale/doc/ale-nasm.txt delete mode 100644 pack/acp/start/ale/doc/ale-nroff.txt delete mode 100644 pack/acp/start/ale/doc/ale-objc.txt delete mode 100644 pack/acp/start/ale/doc/ale-objcpp.txt delete mode 100644 pack/acp/start/ale/doc/ale-ocaml.txt delete mode 100644 pack/acp/start/ale/doc/ale-pawn.txt delete mode 100644 pack/acp/start/ale/doc/ale-perl.txt delete mode 100644 pack/acp/start/ale/doc/ale-perl6.txt delete mode 100644 pack/acp/start/ale/doc/ale-php.txt delete mode 100644 pack/acp/start/ale/doc/ale-po.txt delete mode 100644 pack/acp/start/ale/doc/ale-pod.txt delete mode 100644 pack/acp/start/ale/doc/ale-pony.txt delete mode 100644 pack/acp/start/ale/doc/ale-powershell.txt delete mode 100644 pack/acp/start/ale/doc/ale-prolog.txt delete mode 100644 pack/acp/start/ale/doc/ale-proto.txt delete mode 100644 pack/acp/start/ale/doc/ale-pug.txt delete mode 100644 pack/acp/start/ale/doc/ale-puppet.txt delete mode 100644 pack/acp/start/ale/doc/ale-pyrex.txt delete mode 100644 pack/acp/start/ale/doc/ale-python.txt delete mode 100644 pack/acp/start/ale/doc/ale-qml.txt delete mode 100644 pack/acp/start/ale/doc/ale-r.txt delete mode 100644 pack/acp/start/ale/doc/ale-reasonml.txt delete mode 100644 pack/acp/start/ale/doc/ale-restructuredtext.txt delete mode 100644 pack/acp/start/ale/doc/ale-ruby.txt delete mode 100644 pack/acp/start/ale/doc/ale-rust.txt delete mode 100644 pack/acp/start/ale/doc/ale-sass.txt delete mode 100644 pack/acp/start/ale/doc/ale-scala.txt delete mode 100644 pack/acp/start/ale/doc/ale-scss.txt delete mode 100644 pack/acp/start/ale/doc/ale-sh.txt delete mode 100644 pack/acp/start/ale/doc/ale-sml.txt delete mode 100644 pack/acp/start/ale/doc/ale-solidity.txt delete mode 100644 pack/acp/start/ale/doc/ale-spec.txt delete mode 100644 pack/acp/start/ale/doc/ale-sql.txt delete mode 100644 pack/acp/start/ale/doc/ale-stylus.txt delete mode 100644 pack/acp/start/ale/doc/ale-sugarss.txt delete mode 100644 pack/acp/start/ale/doc/ale-supported-languages-and-tools.txt delete mode 100644 pack/acp/start/ale/doc/ale-swift.txt delete mode 100644 pack/acp/start/ale/doc/ale-tcl.txt delete mode 100644 pack/acp/start/ale/doc/ale-terraform.txt delete mode 100644 pack/acp/start/ale/doc/ale-tex.txt delete mode 100644 pack/acp/start/ale/doc/ale-texinfo.txt delete mode 100644 pack/acp/start/ale/doc/ale-text.txt delete mode 100644 pack/acp/start/ale/doc/ale-thrift.txt delete mode 100644 pack/acp/start/ale/doc/ale-typescript.txt delete mode 100644 pack/acp/start/ale/doc/ale-vala.txt delete mode 100644 pack/acp/start/ale/doc/ale-verilog.txt delete mode 100644 pack/acp/start/ale/doc/ale-vhdl.txt delete mode 100644 pack/acp/start/ale/doc/ale-vim-help.txt delete mode 100644 pack/acp/start/ale/doc/ale-vim.txt delete mode 100644 pack/acp/start/ale/doc/ale-vue.txt delete mode 100644 pack/acp/start/ale/doc/ale-xhtml.txt delete mode 100644 pack/acp/start/ale/doc/ale-xml.txt delete mode 100644 pack/acp/start/ale/doc/ale-yaml.txt delete mode 100644 pack/acp/start/ale/doc/ale-yang.txt delete mode 100644 pack/acp/start/ale/doc/ale.txt delete mode 100644 pack/acp/start/ale/ftplugin/ale-fix-suggest.vim delete mode 100644 pack/acp/start/ale/ftplugin/ale-preview-selection.vim delete mode 100644 pack/acp/start/ale/ftplugin/ale-preview.vim delete mode 100644 pack/acp/start/ale/plugin/ale.vim delete mode 100644 pack/acp/start/ale/rplugin/python3/deoplete/sources/ale.py delete mode 100644 pack/acp/start/ale/supported-tools.md delete mode 100644 pack/acp/start/ale/syntax/ale-fix-suggest.vim delete mode 100644 pack/acp/start/ale/syntax/ale-preview-selection.vim delete mode 100644 pack/acp/start/vimoutliner/.gitignore delete mode 100644 pack/acp/start/vimoutliner/CHANGELOG delete mode 100644 pack/acp/start/vimoutliner/INSTALL delete mode 100644 pack/acp/start/vimoutliner/LICENSE delete mode 100644 pack/acp/start/vimoutliner/README delete mode 120000 pack/acp/start/vimoutliner/README.detailed delete mode 100644 pack/acp/start/vimoutliner/TODO.otl delete mode 100644 pack/acp/start/vimoutliner/colors/votl_dark.vim delete mode 100644 pack/acp/start/vimoutliner/colors/votl_light.vim delete mode 100644 pack/acp/start/vimoutliner/colors/votl_test.vim delete mode 100644 pack/acp/start/vimoutliner/doc/votl.txt delete mode 100644 pack/acp/start/vimoutliner/doc/votl_cheatsheet.txt delete mode 100644 pack/acp/start/vimoutliner/ftdetect/votl.vim delete mode 100644 pack/acp/start/vimoutliner/ftplugin/votl.vim delete mode 100755 pack/acp/start/vimoutliner/install.sh delete mode 100644 pack/acp/start/vimoutliner/syntax/votl.vim delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/images/Vimoutliner_logo.png delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/images/Vimoutliner_logo_tiny.png delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/images/favicon.ico delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/plugin/prev/votl_hoist.otl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/plugin/prev/votl_hoist.vim delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/plugin/votl_checkbox.otl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/plugin/votl_checkbox.vim delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/plugin/votl_clock.vim delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/plugin/votl_format.vim delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/plugin/votl_gtd.vim delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/plugin/votl_math.otl delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/plugin/votl_math.vim delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/plugin/votl_newhoist.vim delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/plugin/votl_smart_paste.vim delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/plugin/votl_tags.vim delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/MediaWiki2otl delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/MediaWiki2otl.desc delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING.GPL delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING.LPDTL.1.0 delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/INSTALL delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/LPDTL_discuss.txt delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/Node.pm delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/README.otl delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/deletetest.otl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_attribs.pl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_bylevel.pl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_delete.pl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_hello.pl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_insert.pl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_nodepath.pl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_otl2markup.pl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_parse.pl delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/Node/myapp.cfg delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/fs2otl delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2aft.awk delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2aft.pdf delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2docbook.pl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html.py delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html_autonumbered.css delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html_nnnnnn.css delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/.vimrc delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/README delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.otl delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.pdf delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.png delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.py delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.tex delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.toc delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2lyx.awk delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2ooimpress.py delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2ooimpress.sh delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2table.py delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2tags.py delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2tags_freemind.conf delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl2tags_graphviz.conf delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/Apache/OTL.pm delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/README delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/devel-mode delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/javascript/jquery.js delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/javascript/theme2.js delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/javascript/theme3.js delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/sample.otl delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme1.css delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme2.css delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme3.css delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otlgrep.py delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otlhead.sh delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otlsplit.py delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/otltail.sh delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/2005.otl delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vimrc delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_ctags.conf delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_generator.rb delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_readme.otl delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_shelf.otl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_ui.sh delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/freemind.py delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/freemind_outline.py delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/otl.py delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/outline_freemind.py delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/test.otl delete mode 100755 pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/test.sh delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/vo2html.rb delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/vo2odp.rb delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/vo2xo.rb delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/votl_maketags.1 delete mode 100644 pack/acp/start/vimoutliner/vimoutliner/scripts/votl_maketags.pl delete mode 100644 pack/acp/start/vimoutliner/vimoutlinerrc diff --git a/pack/acp/start/ale/LICENSE b/pack/acp/start/ale/LICENSE deleted file mode 100644 index f8f3524..0000000 --- a/pack/acp/start/ale/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2016-2019, 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/pack/acp/start/ale/ale_linters/ada/gcc.vim b/pack/acp/start/ale/ale_linters/ada/gcc.vim deleted file mode 100644 index 87496b8..0000000 --- a/pack/acp/start/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 ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p: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/pack/acp/start/ale/ale_linters/ansible/ansible_lint.vim b/pack/acp/start/ale/ale_linters/ansible/ansible_lint.vim deleted file mode 100644 index c4affa3..0000000 --- a/pack/acp/start/ale/ale_linters/ansible/ansible_lint.vim +++ /dev/null @@ -1,56 +0,0 @@ -" Author: Bjorn Neergaard -" 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, 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 - - " Matches patterns line the following: - " - " test.yml:35: [EANSIBLE0002] Trailing whitespace - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?: \[?([[:alnum:]]+)\]? (.*)$' - let l:output = [] - - 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 - - return l:output -endfunction - -call ale#linter#Define('ansible', { -\ 'name': 'ansible_lint', -\ 'aliases': ['ansible', 'ansible-lint'], -\ 'executable': function('ale_linters#ansible#ansible_lint#GetExecutable'), -\ 'command': '%e -p %t', -\ 'callback': 'ale_linters#ansible#ansible_lint#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/apiblueprint/drafter.vim b/pack/acp/start/ale/ale_linters/apiblueprint/drafter.vim deleted file mode 100644 index 5d40c53..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/asciidoc/alex.vim b/pack/acp/start/ale/ale_linters/asciidoc/alex.vim deleted file mode 100644 index 97976b2..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/asciidoc/proselint.vim b/pack/acp/start/ale/ale_linters/asciidoc/proselint.vim deleted file mode 100644 index b636c06..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/asciidoc/redpen.vim b/pack/acp/start/ale/ale_linters/asciidoc/redpen.vim deleted file mode 100644 index 819e385..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/asciidoc/textlint.vim b/pack/acp/start/ale/ale_linters/asciidoc/textlint.vim deleted file mode 100644 index 308a3a2..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/asciidoc/vale.vim b/pack/acp/start/ale/ale_linters/asciidoc/vale.vim deleted file mode 100644 index b3cf454..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/asciidoc/writegood.vim b/pack/acp/start/ale/ale_linters/asciidoc/writegood.vim deleted file mode 100644 index a29b7e9..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/asm/gcc.vim b/pack/acp/start/ale/ale_linters/asm/gcc.vim deleted file mode 100644 index eecab6e..0000000 --- a/pack/acp/start/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 ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p: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/pack/acp/start/ale/ale_linters/awk/gawk.vim b/pack/acp/start/ale/ale_linters/awk/gawk.vim deleted file mode 100644 index f795c57..0000000 --- a/pack/acp/start/ale/ale_linters/awk/gawk.vim +++ /dev/null @@ -1,22 +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 }') - \ . ale#Pad(ale#Var(a:buffer, 'awk_gawk_options')) - \ . ' -f %t --lint /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/pack/acp/start/ale/ale_linters/bib/bibclean.vim b/pack/acp/start/ale/ale_linters/bib/bibclean.vim deleted file mode 100644 index 9056a9c..0000000 --- a/pack/acp/start/ale/ale_linters/bib/bibclean.vim +++ /dev/null @@ -1,75 +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 - return matchlist(a:line, '^\(.*\) "stdin", line \(.*\): \(.*\)$') -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/pack/acp/start/ale/ale_linters/c/ccls.vim b/pack/acp/start/ale/ale_linters/c/ccls.vim deleted file mode 100644 index 9e3dafe..0000000 --- a/pack/acp/start/ale/ale_linters/c/ccls.vim +++ /dev/null @@ -1,14 +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#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#Var(b, 'c_ccls_init_options')}, -\}) diff --git a/pack/acp/start/ale/ale_linters/c/clang.vim b/pack/acp/start/ale/ale_linters/c/clang.vim deleted file mode 100644 index 681101f..0000000 --- a/pack/acp/start/ale/ale_linters/c/clang.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: Masahiro H https://github.com/mshr-h -" Description: clang linter for c files - -call ale#Set('c_clang_executable', 'clang') -call ale#Set('c_clang_options', '-std=c11 -Wall') - -function! ale_linters#c#clang#GetCommand(buffer, output) abort - let l:cflags = ale#c#GetCFlags(a:buffer, a:output) - - " -iquote with the directory the file is in makes #include work for - " headers in the same directory. - return '%e -S -x c -fsyntax-only' - \ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) - \ . ale#Pad(l:cflags) - \ . ale#Pad(ale#Var(a:buffer, 'c_clang_options')) . ' -' -endfunction - -call ale#linter#Define('c', { -\ 'name': 'clang', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'c_clang_executable')}, -\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#c#clang#GetCommand'))}, -\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes', -\}) diff --git a/pack/acp/start/ale/ale_linters/c/clangd.vim b/pack/acp/start/ale/ale_linters/c/clangd.vim deleted file mode 100644 index 79b600f..0000000 --- a/pack/acp/start/ale/ale_linters/c/clangd.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Andrey Melentyev -" Description: Clangd language server - -call ale#Set('c_clangd_executable', 'clangd') -call ale#Set('c_clangd_options', '') - -function! ale_linters#c#clangd#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'c_clangd_options')) -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/pack/acp/start/ale/ale_linters/c/clangtidy.vim b/pack/acp/start/ale/ale_linters/c/clangtidy.vim deleted file mode 100644 index f998866..0000000 --- a/pack/acp/start/ale/ale_linters/c/clangtidy.vim +++ /dev/null @@ -1,49 +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) abort - let l:checks = join(ale#Var(a:buffer, 'c_clangtidy_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 = empty(l:build_dir) - \ ? ale#Var(a:buffer, 'c_clangtidy_options') - \ : '' - - " 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': function('ale_linters#c#clangtidy#GetCommand'), -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/c/cppcheck.vim b/pack/acp/start/ale/ale_linters/c/cppcheck.vim deleted file mode 100644 index 309b285..0000000 --- a/pack/acp/start/ale/ale_linters/c/cppcheck.vim +++ /dev/null @@ -1,28 +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:cd_command = ale#handlers#cppcheck#GetCdCommand(a:buffer) - 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) - \ : '' - - return l:cd_command - \ . '%e -q --language=c' - \ . 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')}, -\ 'command': function('ale_linters#c#cppcheck#GetCommand'), -\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/c/cquery.vim b/pack/acp/start/ale/ale_linters/c/cquery.vim deleted file mode 100644 index ff0f34a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/c/flawfinder.vim b/pack/acp/start/ale/ale_linters/c/flawfinder.vim deleted file mode 100644 index 53c3671..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/c/gcc.vim b/pack/acp/start/ale/ale_linters/c/gcc.vim deleted file mode 100644 index 1df1018..0000000 --- a/pack/acp/start/ale/ale_linters/c/gcc.vim +++ /dev/null @@ -1,28 +0,0 @@ -" Author: w0rp -" Description: gcc linter for c files - -call ale#Set('c_gcc_executable', 'gcc') -call ale#Set('c_gcc_options', '-std=c11 -Wall') - -function! ale_linters#c#gcc#GetCommand(buffer, output) abort - let l:cflags = ale#c#GetCFlags(a:buffer, a:output) - - " -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 c' - \ . ' -o ' . g:ale#util#nul_file - \ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) - \ . ale#Pad(l:cflags) - \ . ale#Pad(ale#Var(a:buffer, 'c_gcc_options')) . ' -' -endfunction - -call ale#linter#Define('c', { -\ 'name': 'gcc', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'c_gcc_executable')}, -\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#c#gcc#GetCommand'))}, -\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes', -\}) diff --git a/pack/acp/start/ale/ale_linters/chef/cookstyle.vim b/pack/acp/start/ale/ale_linters/chef/cookstyle.vim deleted file mode 100644 index 50bae2a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/chef/foodcritic.vim b/pack/acp/start/ale/ale_linters/chef/foodcritic.vim deleted file mode 100644 index 48beba7..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/clojure/clj_kondo.vim b/pack/acp/start/ale/ale_linters/clojure/clj_kondo.vim deleted file mode 100644 index 5dd11c1..0000000 --- a/pack/acp/start/ale/ale_linters/clojure/clj_kondo.vim +++ /dev/null @@ -1,34 +0,0 @@ -" Author: Masashi Iizuka -" Description: linter for clojure using clj-kondo https://github.com/borkdude/clj-kondo - -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': 'clj-kondo --lint %t', -\ 'callback': 'ale_linters#clojure#clj_kondo#HandleCljKondoFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/clojure/joker.vim b/pack/acp/start/ale/ale_linters/clojure/joker.vim deleted file mode 100644 index 1f17cd3..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/cloudformation/cfn_python_lint.vim b/pack/acp/start/ale/ale_linters/cloudformation/cfn_python_lint.vim deleted file mode 100644 index d0ac7b2..0000000 --- a/pack/acp/start/ale/ale_linters/cloudformation/cfn_python_lint.vim +++ /dev/null @@ -1,35 +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', -\ 'executable': 'cfn-lint', -\ 'command': 'cfn-lint --template %t --format parseable', -\ 'callback': 'ale_linters#cloudformation#cfn_python_lint#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/cmake/cmakelint.vim b/pack/acp/start/ale/ale_linters/cmake/cmakelint.vim deleted file mode 100644 index d955a26..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/coffee/coffee.vim b/pack/acp/start/ale/ale_linters/coffee/coffee.vim deleted file mode 100644 index 8e89163..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/coffee/coffeelint.vim b/pack/acp/start/ale/ale_linters/coffee/coffeelint.vim deleted file mode 100644 index b7c85fa..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/cpp/ccls.vim b/pack/acp/start/ale/ale_linters/cpp/ccls.vim deleted file mode 100644 index b265ff7..0000000 --- a/pack/acp/start/ale/ale_linters/cpp/ccls.vim +++ /dev/null @@ -1,14 +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#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#Var(b, 'cpp_ccls_init_options')}, -\}) diff --git a/pack/acp/start/ale/ale_linters/cpp/clang.vim b/pack/acp/start/ale/ale_linters/cpp/clang.vim deleted file mode 100644 index e48291e..0000000 --- a/pack/acp/start/ale/ale_linters/cpp/clang.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: Tomota Nakamura -" Description: clang linter for cpp files - -call ale#Set('cpp_clang_executable', 'clang++') -call ale#Set('cpp_clang_options', '-std=c++14 -Wall') - -function! ale_linters#cpp#clang#GetCommand(buffer, output) abort - let l:cflags = ale#c#GetCFlags(a:buffer, a:output) - - " -iquote with the directory the file is in makes #include work for - " headers in the same directory. - return '%e -S -x c++ -fsyntax-only' - \ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) - \ . ale#Pad(l:cflags) - \ . ale#Pad(ale#Var(a:buffer, 'cpp_clang_options')) . ' -' -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'clang', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'cpp_clang_executable')}, -\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#cpp#clang#GetCommand'))}, -\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes', -\}) diff --git a/pack/acp/start/ale/ale_linters/cpp/clangcheck.vim b/pack/acp/start/ale/ale_linters/cpp/clangcheck.vim deleted file mode 100644 index 7d32a57..0000000 --- a/pack/acp/start/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' : '') - \ . 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/pack/acp/start/ale/ale_linters/cpp/clangd.vim b/pack/acp/start/ale/ale_linters/cpp/clangd.vim deleted file mode 100644 index fab605f..0000000 --- a/pack/acp/start/ale/ale_linters/cpp/clangd.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Andrey Melentyev -" Description: Clangd language server - -call ale#Set('cpp_clangd_executable', 'clangd') -call ale#Set('cpp_clangd_options', '') - -function! ale_linters#cpp#clangd#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'cpp_clangd_options')) -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/pack/acp/start/ale/ale_linters/cpp/clangtidy.vim b/pack/acp/start/ale/ale_linters/cpp/clangtidy.vim deleted file mode 100644 index 085bc33..0000000 --- a/pack/acp/start/ale/ale_linters/cpp/clangtidy.vim +++ /dev/null @@ -1,43 +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) abort - let l:checks = join(ale#Var(a:buffer, 'cpp_clangtidy_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 = empty(l:build_dir) - \ ? ale#Var(a:buffer, 'cpp_clangtidy_options') - \ : '' - - " 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': function('ale_linters#cpp#clangtidy#GetCommand'), -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/cpp/clazy.vim b/pack/acp/start/ale/ale_linters/cpp/clazy.vim deleted file mode 100644 index 9b29ac9..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/cpp/cppcheck.vim b/pack/acp/start/ale/ale_linters/cpp/cppcheck.vim deleted file mode 100644 index 7cd80db..0000000 --- a/pack/acp/start/ale/ale_linters/cpp/cppcheck.vim +++ /dev/null @@ -1,28 +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:cd_command = ale#handlers#cppcheck#GetCdCommand(a:buffer) - 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) - \ : '' - - return l:cd_command - \ . '%e -q --language=c++' - \ . 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')}, -\ 'command': function('ale_linters#cpp#cppcheck#GetCommand'), -\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/cpp/cpplint.vim b/pack/acp/start/ale/ale_linters/cpp/cpplint.vim deleted file mode 100644 index f1f6ce7..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/cpp/cquery.vim b/pack/acp/start/ale/ale_linters/cpp/cquery.vim deleted file mode 100644 index 2971cdc..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/cpp/flawfinder.vim b/pack/acp/start/ale/ale_linters/cpp/flawfinder.vim deleted file mode 100644 index 5bfdea2..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/cpp/gcc.vim b/pack/acp/start/ale/ale_linters/cpp/gcc.vim deleted file mode 100644 index 108d6d7..0000000 --- a/pack/acp/start/ale/ale_linters/cpp/gcc.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: geam -" Description: gcc linter for cpp files -" -call ale#Set('cpp_gcc_executable', 'gcc') -call ale#Set('cpp_gcc_options', '-std=c++14 -Wall') - -function! ale_linters#cpp#gcc#GetCommand(buffer, output) abort - let l:cflags = ale#c#GetCFlags(a:buffer, a:output) - - " -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 c++' - \ . ' -o ' . g:ale#util#nul_file - \ . ' -iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) - \ . ale#Pad(l:cflags) - \ . ale#Pad(ale#Var(a:buffer, 'cpp_gcc_options')) . ' -' -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'gcc', -\ 'aliases': ['g++'], -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'cpp_gcc_executable')}, -\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#cpp#gcc#GetCommand'))}, -\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes', -\}) diff --git a/pack/acp/start/ale/ale_linters/crystal/ameba.vim b/pack/acp/start/ale/ale_linters/crystal/ameba.vim deleted file mode 100644 index 5dfc7f4..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/crystal/crystal.vim b/pack/acp/start/ale/ale_linters/crystal/crystal.vim deleted file mode 100644 index 3c2fefb..0000000 --- a/pack/acp/start/ale/ale_linters/crystal/crystal.vim +++ /dev/null @@ -1,31 +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, []) - 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/pack/acp/start/ale/ale_linters/cs/mcs.vim b/pack/acp/start/ale/ale_linters/cs/mcs.vim deleted file mode 100644 index 1b373e7..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/cs/mcsc.vim b/pack/acp/start/ale/ale_linters/cs/mcsc.vim deleted file mode 100644 index dd067eb..0000000 --- a/pack/acp/start/ale/ale_linters/cs/mcsc.vim +++ /dev/null @@ -1,81 +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! s:GetWorkingDirectory(buffer) abort - let l:working_directory = ale#Var(a:buffer, 'cs_mcsc_source') - - if !empty(l:working_directory) - return l:working_directory - endif - - return 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 ale#path#CdString(s:GetWorkingDirectory(a:buffer)) - \ . '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:pattern = '^\v(.+\.cs)\((\d+),(\d+)\)\: ([^ ]+) ([^ ]+): (.+)$' - let l:output = [] - - let l:dir = s:GetWorkingDirectory(a:buffer) - - 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, - \ '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': 'mcsc', -\ 'output_stream': 'stderr', -\ 'executable': 'mcs', -\ 'command': function('ale_linters#cs#mcsc#GetCommand'), -\ 'callback': 'ale_linters#cs#mcsc#Handle', -\ 'lint_file': 1 -\}) diff --git a/pack/acp/start/ale/ale_linters/css/csslint.vim b/pack/acp/start/ale/ale_linters/css/csslint.vim deleted file mode 100644 index 50c21ce..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/css/fecs.vim b/pack/acp/start/ale/ale_linters/css/fecs.vim deleted file mode 100644 index 511847c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/css/stylelint.vim b/pack/acp/start/ale/ale_linters/css/stylelint.vim deleted file mode 100644 index 38cb0e0..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'css_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': function('ale_linters#css#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/cucumber/cucumber.vim b/pack/acp/start/ale/ale_linters/cucumber/cucumber.vim deleted file mode 100644 index 0cfd815..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/cuda/nvcc.vim b/pack/acp/start/ale/ale_linters/cuda/nvcc.vim deleted file mode 100644 index f3af07b..0000000 --- a/pack/acp/start/ale/ale_linters/cuda/nvcc.vim +++ /dev/null @@ -1,49 +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 - " Unused: use ale#util#nul_file - " let l:output_file = ale#util#Tempname() . '.ii' - " call ale#command#ManageFile(a:buffer, l:output_file) - 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/pack/acp/start/ale/ale_linters/cypher/cypher_lint.vim b/pack/acp/start/ale/ale_linters/cypher/cypher_lint.vim deleted file mode 100644 index 408ddd6..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/d/dls.vim b/pack/acp/start/ale/ale_linters/d/dls.vim deleted file mode 100644 index 78d1c15..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/d/dmd.vim b/pack/acp/start/ale/ale_linters/d/dmd.vim deleted file mode 100644 index 14461ae..0000000 --- a/pack/acp/start/ale/ale_linters/d/dmd.vim +++ /dev/null @@ -1,74 +0,0 @@ -" Author: w0rp -" Description: "dmd for D files" - -function! ale_linters#d#dmd#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. - return '' - endif - - let l:dub_file = ale#d#FindDUBConfig(a:buffer) - - if empty(l:dub_file) - return '' - endif - - " 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. - return 'cd ' . ale#Escape(fnamemodify(l:dub_file, ':h')) - \ . ' && dub describe --import-paths' -endfunction - -function! ale_linters#d#dmd#RunDUBCommand(buffer) abort - let l:command = ale_linters#d#dmd#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')) -endfunction - -function! ale_linters#d#dmd#DMDCommand(buffer, dub_output, meta) abort - let l:import_list = [] - - " Build a list of import paths generated from DUB, if available. - for l:line in a:dub_output - if !empty(l:line) - " The arguments must be '-Ifilename', not '-I filename' - call add(l:import_list, '-I' . ale#Escape(l:line)) - endif - endfor - - return 'dmd '. join(l:import_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 = '^[^(]\+(\([0-9]\+\)\,\?\([0-9]*\)): \([^:]\+\): \(.\+\)' - 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], - \ 'type': l:match[3] is# 'Warning' ? 'W' : 'E', - \ 'text': l:match[4], - \}) - 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/pack/acp/start/ale/ale_linters/dafny/dafny.vim b/pack/acp/start/ale/ale_linters/dafny/dafny.vim deleted file mode 100644 index b5b9067..0000000 --- a/pack/acp/start/ale/ale_linters/dafny/dafny.vim +++ /dev/null @@ -1,26 +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, { - \ 'bufnr': a:buffer, - \ 'col': l:match[3] + 0, - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[5], - \ 'type': l:match[4] =~# '^Error' ? 'E' : 'W' - \ }) - endfor - - return l:output -endfunction - -call ale#linter#Define('dafny', { -\ 'name': 'dafny', -\ 'executable': 'dafny', -\ 'command': 'dafny %s /compile:0', -\ 'callback': 'ale_linters#dafny#dafny#Handle', -\ 'lint_file': 1, -\ }) diff --git a/pack/acp/start/ale/ale_linters/dart/dartanalyzer.vim b/pack/acp/start/ale/ale_linters/dart/dartanalyzer.vim deleted file mode 100644 index 0a4d974..0000000 --- a/pack/acp/start/ale/ale_linters/dart/dartanalyzer.vim +++ /dev/null @@ -1,36 +0,0 @@ -" Author: w0rp -" Description: Check Dart files with dartanalyzer - -call ale#Set('dart_dartanalyzer_executable', 'dartanalyzer') - -function! ale_linters#dart#dartanalyzer#GetCommand(buffer) abort - let l:path = ale#path#FindNearestFile(a:buffer, '.packages') - - return '%e' - \ . (!empty(l:path) ? ' --packages ' . ale#Escape(l:path) : '') - \ . ' %s' -endfunction - -function! ale_linters#dart#dartanalyzer#Handle(buffer, lines) abort - let l:pattern = '\v^ ([a-z]+) . (.+) at (.+):(\d+):(\d+) . (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'type': l:match[1] is# 'error' ? 'E' : 'W', - \ 'text': l:match[6] . ': ' . l:match[2], - \ 'lnum': str2nr(l:match[4]), - \ 'col': str2nr(l:match[5]), - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('dart', { -\ 'name': 'dartanalyzer', -\ 'executable': {b -> ale#Var(b, 'dart_dartanalyzer_executable')}, -\ 'command': function('ale_linters#dart#dartanalyzer#GetCommand'), -\ 'callback': 'ale_linters#dart#dartanalyzer#Handle', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/dart/language_server.vim b/pack/acp/start/ale/ale_linters/dart/language_server.vim deleted file mode 100644 index d0e639c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/dockerfile/dockerfile_lint.vim b/pack/acp/start/ale/ale_linters/dockerfile/dockerfile_lint.vim deleted file mode 100644 index 95768b1..0000000 --- a/pack/acp/start/ale/ale_linters/dockerfile/dockerfile_lint.vim +++ /dev/null @@ -1,61 +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'] - - if get(l:object, 'description', 'None') isnot# 'None' - let l:message = l:message . '. ' . l:object['description'] - endif - - call add(l:messages, { - \ 'lnum': l:line, - \ 'text': l:message, - \ 'type': ale_linters#dockerfile#dockerfile_lint#GetType(l:type), - \}) - 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/pack/acp/start/ale/ale_linters/dockerfile/hadolint.vim b/pack/acp/start/ale/ale_linters/dockerfile/hadolint.vim deleted file mode 100644 index e57cd76..0000000 --- a/pack/acp/start/ale/ale_linters/dockerfile/hadolint.vim +++ /dev/null @@ -1,99 +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: - " - " /dev/stdin:19 DL3001 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 - - let l:type = 'W' - let l:text = l:match[6] - let l:detail = l:match[6] - let l:domain = 'https://github.com/hadolint/hadolint/wiki/' - - 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:detail = l:code . l:link . "\n\n" . l:detail - else - let l:type = 'E' - endif - - call add(l:output, { - \ 'lnum': l:lnum, - \ 'col': l:colnum, - \ 'type': l:type, - \ 'text': l:text, - \ 'detail': l:detail - \}) - 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) - - if l:command is# 'docker' - return 'docker run --rm -i ' . ale#Var(a:buffer, 'dockerfile_hadolint_docker_image') - endif - - return 'hadolint -' -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/pack/acp/start/ale/ale_linters/elixir/credo.vim b/pack/acp/start/ale/ale_linters/elixir/credo.vim deleted file mode 100644 index 317ecab..0000000 --- a/pack/acp/start/ale/ale_linters/elixir/credo.vim +++ /dev/null @@ -1,63 +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#GetCommand(buffer) abort - let l:project_root = ale#handlers#elixir#FindMixProjectRoot(a:buffer) - let l:mode = ale_linters#elixir#credo#GetMode() - - return ale#path#CdString(l:project_root) - \ . 'mix help credo && ' - \ . 'mix credo ' . ale_linters#elixir#credo#GetMode() - \ . ' --format=flycheck --read-from-stdin %s' -endfunction - -call ale#linter#Define('elixir', { -\ 'name': 'credo', -\ 'executable': 'mix', -\ 'command': function('ale_linters#elixir#credo#GetCommand'), -\ 'callback': 'ale_linters#elixir#credo#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/elixir/dialyxir.vim b/pack/acp/start/ale/ale_linters/elixir/dialyxir.vim deleted file mode 100644 index c7da775..0000000 --- a/pack/acp/start/ale/ale_linters/elixir/dialyxir.vim +++ /dev/null @@ -1,41 +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 - -function! ale_linters#elixir#dialyxir#GetCommand(buffer) abort - let l:project_root = ale#handlers#elixir#FindMixProjectRoot(a:buffer) - - return ale#path#CdString(l:project_root) - \ . ' mix help dialyzer && mix dialyzer' -endfunction - -call ale#linter#Define('elixir', { -\ 'name': 'dialyxir', -\ 'executable': 'mix', -\ 'command': function('ale_linters#elixir#dialyxir#GetCommand'), -\ 'callback': 'ale_linters#elixir#dialyxir#Handle', -\}) - diff --git a/pack/acp/start/ale/ale_linters/elixir/dogma.vim b/pack/acp/start/ale/ale_linters/elixir/dogma.vim deleted file mode 100644 index 1c72115..0000000 --- a/pack/acp/start/ale/ale_linters/elixir/dogma.vim +++ /dev/null @@ -1,45 +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 - -function! ale_linters#elixir#dogma#GetCommand(buffer) abort - let l:project_root = ale#handlers#elixir#FindMixProjectRoot(a:buffer) - - return ale#path#CdString(l:project_root) - \ . ' mix help dogma && mix dogma %s --format=flycheck' -endfunction - -call ale#linter#Define('elixir', { -\ 'name': 'dogma', -\ 'executable': 'mix', -\ 'command': function('ale_linters#elixir#dogma#GetCommand'), -\ 'lint_file': 1, -\ 'callback': 'ale_linters#elixir#dogma#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/elixir/elixir_ls.vim b/pack/acp/start/ale/ale_linters/elixir/elixir_ls.vim deleted file mode 100644 index d5517de..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/elixir/mix.vim b/pack/acp/start/ale/ale_linters/elixir/mix.vim deleted file mode 100644 index abf5d0a..0000000 --- a/pack/acp/start/ale/ale_linters/elixir/mix.vim +++ /dev/null @@ -1,52 +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:project_root = ale#handlers#elixir#FindMixProjectRoot(a:buffer) - - let l:temp_dir = ale#command#CreateDirectory(a:buffer) - - let l:mix_build_path = has('win32') - \ ? 'set MIX_BUILD_PATH=' . ale#Escape(l:temp_dir) . ' &&' - \ : 'MIX_BUILD_PATH=' . ale#Escape(l:temp_dir) - - return ale#path#CdString(l:project_root) - \ . l:mix_build_path - \ . ' mix compile %s' -endfunction - -call ale#linter#Define('elixir', { -\ 'name': 'mix', -\ 'executable': 'mix', -\ 'command': function('ale_linters#elixir#mix#GetCommand'), -\ 'callback': 'ale_linters#elixir#mix#Handle', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/elm/elm_lsp.vim b/pack/acp/start/ale/ale_linters/elm/elm_lsp.vim deleted file mode 100644 index 2259286..0000000 --- a/pack/acp/start/ale/ale_linters/elm/elm_lsp.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: antew - https://github.com/antew -" Description: LSP integration for elm, currently supports diagnostics (linting) - -call ale#Set('elm_lsp_executable', 'elm-lsp') -call ale#Set('elm_lsp_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! elm_lsp#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 - -call ale#linter#Define('elm', { -\ 'name': 'elm_lsp', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#node#FindExecutable(b, 'elm_lsp', [ -\ 'node_modules/.bin/elm-lsp', -\ ])}, -\ 'command': '%e --stdio', -\ 'project_root': function('elm_lsp#GetRootDir'), -\ 'language': 'elm' -\}) diff --git a/pack/acp/start/ale/ale_linters/elm/make.vim b/pack/acp/start/ale/ale_linters/elm/make.vim deleted file mode 100644 index 6b93257..0000000 --- a/pack/acp/start/ale/ale_linters/elm/make.vim +++ /dev/null @@ -1,240 +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 - -" 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:root_dir = ale_linters#elm#make#GetRootDir(a:buffer) - let l:is_v19 = ale_linters#elm#make#IsVersionGte19(a:buffer) - let l:is_using_elm_test = l:executable =~# 'elm-test$' - - if empty(l:root_dir) - let l:dir_set_cmd = '' - else - let l:dir_set_cmd = 'cd ' . ale#Escape(l:root_dir) . ' && ' - endif - - " 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#node#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 l:dir_set_cmd . '%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#node#FindExecutable( - \ a:buffer, - \ 'elm_make', - \ ['node_modules/.bin/elm-test', 'node_modules/.bin/elm'] - \) - else - return ale#node#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', -\ 'command': function('ale_linters#elm#make#GetCommand'), -\ 'callback': 'ale_linters#elm#make#Handle' -\}) diff --git a/pack/acp/start/ale/ale_linters/erlang/dialyzer.vim b/pack/acp/start/ale/ale_linters/erlang/dialyzer.vim deleted file mode 100644 index 7af64c4..0000000 --- a/pack/acp/start/ale/ale_linters/erlang/dialyzer.vim +++ /dev/null @@ -1,93 +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_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 = split(globpath(l:plt_file_directory, '/*_plt'), '\n') - 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:command = ale#Escape(ale_linters#erlang#dialyzer#GetExecutable(a:buffer)) - \ . ' -n' - \ . ' --plt ' . ale#Escape(ale_linters#erlang#dialyzer#GetPlt(a:buffer)) - \ . ' -Wunmatched_returns' - \ . ' -Werror_handling' - \ . ' -Wrace_conditions' - \ . ' -Wunderspecs' - \ . ' %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/pack/acp/start/ale/ale_linters/erlang/erlc.vim b/pack/acp/start/ale/ale_linters/erlang/erlc.vim deleted file mode 100644 index a83bacc..0000000 --- a/pack/acp/start/ale/ale_linters/erlang/erlc.vim +++ /dev/null @@ -1,96 +0,0 @@ -" Author: Magnus Ottenklinger - https://github.com/evnu - -let g:ale_erlang_erlc_options = get(g:, 'ale_erlang_erlc_options', '') - -function! ale_linters#erlang#erlc#GetCommand(buffer) abort - let l:output_file = ale#util#Tempname() - call ale#command#ManageFile(a:buffer, l:output_file) - - return 'erlc -o ' . ale#Escape(l:output_file) - \ . ' ' . ale#Var(a:buffer, 'erlang_erlc_options') - \ . ' %t' -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+): (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[3] - let l:text = l:match[4] - - " 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': 'erlc', -\ 'command': function('ale_linters#erlang#erlc#GetCommand'), -\ 'callback': 'ale_linters#erlang#erlc#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/erlang/syntaxerl.vim b/pack/acp/start/ale/ale_linters/erlang/syntaxerl.vim deleted file mode 100644 index 5d555a8..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/eruby/erb.vim b/pack/acp/start/ale/ale_linters/eruby/erb.vim deleted file mode 100644 index f343832..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/eruby/erubi.vim b/pack/acp/start/ale/ale_linters/eruby/erubi.vim deleted file mode 100644 index ddca3f6..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/eruby/erubis.vim b/pack/acp/start/ale/ale_linters/eruby/erubis.vim deleted file mode 100644 index 755c580..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/eruby/ruumba.vim b/pack/acp/start/ale/ale_linters/eruby/ruumba.vim deleted file mode 100644 index e68bb51..0000000 --- a/pack/acp/start/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#handlers#ruby#EscapeExecutable(l:executable, 'ruumba') - \ . ' --format json --force-exclusion ' - \ . ale#Var(a:buffer, 'eruby_ruumba_options') - \ . ' --stdin ' . ale#Escape(expand('#' . a:buffer . ':p')) -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/pack/acp/start/ale/ale_linters/fish/fish.vim b/pack/acp/start/ale/ale_linters/fish/fish.vim deleted file mode 100644 index 87ede29..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/fortran/gcc.vim b/pack/acp/start/ale/ale_linters/fortran/gcc.vim deleted file mode 100644 index 6e97d6f..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/fortran/language_server.vim b/pack/acp/start/ale/ale_linters/fortran/language_server.vim deleted file mode 100644 index 00aa057..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/fountain/proselint.vim b/pack/acp/start/ale/ale_linters/fountain/proselint.vim deleted file mode 100644 index 353a2e5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/fuse/fusionlint.vim b/pack/acp/start/ale/ale_linters/fuse/fusionlint.vim deleted file mode 100644 index ffb25d3..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/gitcommit/gitlint.vim b/pack/acp/start/ale/ale_linters/gitcommit/gitlint.vim deleted file mode 100644 index 4b9cec6..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/glsl/glslang.vim b/pack/acp/start/ale/ale_linters/glsl/glslang.vim deleted file mode 100644 index bbddce9..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/glsl/glslls.vim b/pack/acp/start/ale/ale_linters/glsl/glslls.vim deleted file mode 100644 index b62844c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/go/bingo.vim b/pack/acp/start/ale/ale_linters/go/bingo.vim deleted file mode 100644 index e446bdc..0000000 --- a/pack/acp/start/ale/ale_linters/go/bingo.vim +++ /dev/null @@ -1,29 +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 '%e' . ale#Pad(ale#Var(a:buffer, 'go_bingo_options')) -endfunction - -function! ale_linters#go#bingo#FindProjectRoot(buffer) abort - let l:project_root = 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/pack/acp/start/ale/ale_linters/go/gobuild.vim b/pack/acp/start/ale/ale_linters/go/gobuild.vim deleted file mode 100644 index 374ded3..0000000 --- a/pack/acp/start/ale/ale_linters/go/gobuild.vim +++ /dev/null @@ -1,56 +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#path#BufferCdString(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')}, -\ 'command': function('ale_linters#go#gobuild#GetCommand'), -\ 'output_stream': 'stderr', -\ 'callback': 'ale_linters#go#gobuild#Handler', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/go/gofmt.vim b/pack/acp/start/ale/ale_linters/go/gofmt.vim deleted file mode 100644 index 337deef..0000000 --- a/pack/acp/start/ale/ale_linters/go/gofmt.vim +++ /dev/null @@ -1,10 +0,0 @@ -" Author: neersighted -" Description: gofmt for Go files - -call ale#linter#Define('go', { -\ 'name': 'gofmt', -\ 'output_stream': 'stderr', -\ 'executable': 'gofmt', -\ 'command': 'gofmt -e %t', -\ 'callback': 'ale#handlers#unix#HandleAsError', -\}) diff --git a/pack/acp/start/ale/ale_linters/go/golangci_lint.vim b/pack/acp/start/ale/ale_linters/go/golangci_lint.vim deleted file mode 100644 index 357f794..0000000 --- a/pack/acp/start/ale/ale_linters/go/golangci_lint.vim +++ /dev/null @@ -1,56 +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#path#BufferCdString(a:buffer) - \ . '%e run ' - \ . l:options - endif - - return ale#path#BufferCdString(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\*?(.+)$' - - 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) - " 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': 'E', - \ 'text': l:match[4], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('go', { -\ 'name': 'golangci-lint', -\ 'executable': {b -> ale#Var(b, 'go_golangci_lint_executable')}, -\ 'command': function('ale_linters#go#golangci_lint#GetCommand'), -\ 'callback': 'ale_linters#go#golangci_lint#Handler', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/go/golint.vim b/pack/acp/start/ale/ale_linters/go/golint.vim deleted file mode 100644 index 765e147..0000000 --- a/pack/acp/start/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 '%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/pack/acp/start/ale/ale_linters/go/gometalinter.vim b/pack/acp/start/ale/ale_linters/go/gometalinter.vim deleted file mode 100644 index 19d70a8..0000000 --- a/pack/acp/start/ale/ale_linters/go/gometalinter.vim +++ /dev/null @@ -1,57 +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#path#BufferCdString(a:buffer) - \ . '%e' - \ . (!empty(l:options) ? ' ' . l:options : '') . ' .' - endif - - return ale#path#BufferCdString(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')}, -\ 'command': function('ale_linters#go#gometalinter#GetCommand'), -\ 'callback': 'ale_linters#go#gometalinter#Handler', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/go/gopls.vim b/pack/acp/start/ale/ale_linters/go/gopls.vim deleted file mode 100644 index c411dc2..0000000 --- a/pack/acp/start/ale/ale_linters/go/gopls.vim +++ /dev/null @@ -1,30 +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') - -function! ale_linters#go#gopls#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'go_gopls_options')) -endfunction - -function! ale_linters#go#gopls#FindProjectRoot(buffer) abort - let l:project_root = 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#Var(b, 'go_gopls_executable')}, -\ 'command': function('ale_linters#go#gopls#GetCommand'), -\ 'project_root': function('ale_linters#go#gopls#FindProjectRoot'), -\}) diff --git a/pack/acp/start/ale/ale_linters/go/gosimple.vim b/pack/acp/start/ale/ale_linters/go/gosimple.vim deleted file mode 100644 index 281a0e5..0000000 --- a/pack/acp/start/ale/ale_linters/go/gosimple.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: Ben Reedy -" Description: gosimple for Go files - -function! ale_linters#go#gosimple#GetCommand(buffer) abort - return ale#path#BufferCdString(a:buffer) . ' gosimple .' -endfunction - -call ale#linter#Define('go', { -\ 'name': 'gosimple', -\ 'executable': 'gosimple', -\ 'command': function('ale_linters#go#gosimple#GetCommand'), -\ 'callback': 'ale#handlers#go#Handler', -\ 'output_stream': 'both', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/go/gotype.vim b/pack/acp/start/ale/ale_linters/go/gotype.vim deleted file mode 100644 index d5d563a..0000000 --- a/pack/acp/start/ale/ale_linters/go/gotype.vim +++ /dev/null @@ -1,19 +0,0 @@ -" Author: Jelte Fennema -" Description: gotype for Go files - -function! ale_linters#go#gotype#GetCommand(buffer) abort - if expand('#' . a:buffer . ':p') =~# '_test\.go$' - return '' - endif - - return ale#path#BufferCdString(a:buffer) . ' gotype -e .' -endfunction - -call ale#linter#Define('go', { -\ 'name': 'gotype', -\ 'output_stream': 'stderr', -\ 'executable': 'gotype', -\ 'command': function('ale_linters#go#gotype#GetCommand'), -\ 'callback': 'ale#handlers#go#Handler', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/go/govet.vim b/pack/acp/start/ale/ale_linters/go/govet.vim deleted file mode 100644 index bb81d5d..0000000 --- a/pack/acp/start/ale/ale_linters/go/govet.vim +++ /dev/null @@ -1,27 +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#path#BufferCdString(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')}, -\ 'command': function('ale_linters#go#govet#GetCommand'), -\ 'callback': 'ale#handlers#go#Handler', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/go/langserver.vim b/pack/acp/start/ale/ale_linters/go/langserver.vim deleted file mode 100644 index 776186c..0000000 --- a/pack/acp/start/ale/ale_linters/go/langserver.vim +++ /dev/null @@ -1,28 +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)) - - return 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/pack/acp/start/ale/ale_linters/go/staticcheck.vim b/pack/acp/start/ale/ale_linters/go/staticcheck.vim deleted file mode 100644 index 26fe019..0000000 --- a/pack/acp/start/ale/ale_linters/go/staticcheck.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: Ben Reedy -" Description: staticcheck for Go files - -call ale#Set('go_staticcheck_options', '') -call ale#Set('go_staticcheck_lint_package', 0) - -function! ale_linters#go#staticcheck#GetCommand(buffer) abort - let l:filename = expand('#' . a:buffer . ':t') - let l:options = ale#Var(a:buffer, 'go_staticcheck_options') - let l:lint_package = ale#Var(a:buffer, 'go_staticcheck_lint_package') - - " BufferCdString is used so that we can be sure the paths output from - " staticcheck can be calculated to absolute paths in the Handler - if l:lint_package - return ale#path#BufferCdString(a:buffer) - \ . 'staticcheck' - \ . (!empty(l:options) ? ' ' . l:options : '') . ' .' - endif - - return ale#path#BufferCdString(a:buffer) - \ . 'staticcheck' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' ' . ale#Escape(l:filename) -endfunction - -call ale#linter#Define('go', { -\ 'name': 'staticcheck', -\ 'executable': 'staticcheck', -\ 'command': function('ale_linters#go#staticcheck#GetCommand'), -\ 'callback': 'ale#handlers#go#Handler', -\ 'output_stream': 'both', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/graphql/eslint.vim b/pack/acp/start/ale/ale_linters/graphql/eslint.vim deleted file mode 100644 index 654b8c1..0000000 --- a/pack/acp/start/ale/ale_linters/graphql/eslint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Benjie Gillam -" Description: eslint for GraphQL files - -call ale#linter#Define('graphql', { -\ 'name': 'eslint', -\ 'executable': function('ale#handlers#eslint#GetExecutable'), -\ 'command': function('ale#handlers#eslint#GetCommand'), -\ 'callback': 'ale#handlers#eslint#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/graphql/gqlint.vim b/pack/acp/start/ale/ale_linters/graphql/gqlint.vim deleted file mode 100644 index d5029de..0000000 --- a/pack/acp/start/ale/ale_linters/graphql/gqlint.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: Michiel Westerbeek -" Description: Linter for GraphQL Schemas - -function! ale_linters#graphql#gqlint#GetCommand(buffer) abort - return ale#path#BufferCdString(a:buffer) - \ . 'gqlint' - \ . ' --reporter=simple %t' -endfunction - -call ale#linter#Define('graphql', { -\ 'name': 'gqlint', -\ 'executable': 'gqlint', -\ 'command': function('ale_linters#graphql#gqlint#GetCommand'), -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/pack/acp/start/ale/ale_linters/hack/hack.vim b/pack/acp/start/ale/ale_linters/hack/hack.vim deleted file mode 100644 index 822b5c8..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/hack/hhast.vim b/pack/acp/start/ale/ale_linters/hack/hhast.vim deleted file mode 100644 index 5e6d4de..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/haml/hamllint.vim b/pack/acp/start/ale/ale_linters/haml/hamllint.vim deleted file mode 100644 index 9fcd999..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/handlebars/embertemplatelint.vim b/pack/acp/start/ale/ale_linters/handlebars/embertemplatelint.vim deleted file mode 100644 index 74bd6a9..0000000 --- a/pack/acp/start/ale/ale_linters/handlebars/embertemplatelint.vim +++ /dev/null @@ -1,39 +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#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': 'ember-template-lint', -\ 'executable': {b -> ale#node#FindExecutable(b, 'handlebars_embertemplatelint', [ -\ 'node_modules/.bin/ember-template-lint', -\ ])}, -\ 'command': '%e --json %t', -\ 'callback': 'ale_linters#handlebars#embertemplatelint#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/haskell/cabal_ghc.vim b/pack/acp/start/ale/ale_linters/haskell/cabal_ghc.vim deleted file mode 100644 index f3f248f..0000000 --- a/pack/acp/start/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 ale#path#BufferCdString(a:buffer) - \ . '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', -\ 'command': function('ale_linters#haskell#cabal_ghc#GetCommand'), -\ 'callback': 'ale#handlers#haskell#HandleGHCFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/haskell/ghc.vim b/pack/acp/start/ale/ale_linters/haskell/ghc.vim deleted file mode 100644 index 9c3906b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/haskell/ghc_mod.vim b/pack/acp/start/ale/ale_linters/haskell/ghc_mod.vim deleted file mode 100644 index 30e96b4..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/haskell/hdevtools.vim b/pack/acp/start/ale/ale_linters/haskell/hdevtools.vim deleted file mode 100644 index 3e55e4f..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/haskell/hie.vim b/pack/acp/start/ale/ale_linters/haskell/hie.vim deleted file mode 100644 index c4b5f1d..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/haskell/hlint.vim b/pack/acp/start/ale/ale_linters/haskell/hlint.vim deleted file mode 100644 index 1425251..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/haskell/stack_build.vim b/pack/acp/start/ale/ale_linters/haskell/stack_build.vim deleted file mode 100644 index 8f2d9fd..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/haskell/stack_ghc.vim b/pack/acp/start/ale/ale_linters/haskell/stack_ghc.vim deleted file mode 100644 index c345fe4..0000000 --- a/pack/acp/start/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#path#BufferCdString(a:buffer) - \ . 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'), -\ 'command': function('ale_linters#haskell#stack_ghc#GetCommand'), -\ 'callback': 'ale#handlers#haskell#HandleGHCFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/help/alex.vim b/pack/acp/start/ale/ale_linters/help/alex.vim deleted file mode 100644 index 9be00a8..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/help/proselint.vim b/pack/acp/start/ale/ale_linters/help/proselint.vim deleted file mode 100644 index 6212450..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/help/writegood.vim b/pack/acp/start/ale/ale_linters/help/writegood.vim deleted file mode 100644 index eeb21a7..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/html/alex.vim b/pack/acp/start/ale/ale_linters/html/alex.vim deleted file mode 100644 index 9775675..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/html/fecs.vim b/pack/acp/start/ale/ale_linters/html/fecs.vim deleted file mode 100644 index 15e00e1..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/html/htmlhint.vim b/pack/acp/start/ale/ale_linters/html/htmlhint.vim deleted file mode 100644 index 3e01f51..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'html_htmlhint', [ -\ 'node_modules/.bin/htmlhint', -\ ])}, -\ 'command': function('ale_linters#html#htmlhint#GetCommand'), -\ 'callback': 'ale#handlers#unix#HandleAsError', -\}) diff --git a/pack/acp/start/ale/ale_linters/html/proselint.vim b/pack/acp/start/ale/ale_linters/html/proselint.vim deleted file mode 100644 index 9fd7d67..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/html/stylelint.vim b/pack/acp/start/ale/ale_linters/html/stylelint.vim deleted file mode 100644 index ae8955f..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/html/tidy.vim b/pack/acp/start/ale/ale_linters/html/tidy.vim deleted file mode 100644 index 1e476d4..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/html/writegood.vim b/pack/acp/start/ale/ale_linters/html/writegood.vim deleted file mode 100644 index 6a2bd8e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/idris/idris.vim b/pack/acp/start/ale/ale_linters/idris/idris.vim deleted file mode 100644 index 879e92f..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/ispc/ispc.vim b/pack/acp/start/ale/ale_linters/ispc/ispc.vim deleted file mode 100644 index eb36511..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/java/checkstyle.vim b/pack/acp/start/ale/ale_linters/java/checkstyle.vim deleted file mode 100644 index ee3ca7a..0000000 --- a/pack/acp/start/ale/ale_linters/java/checkstyle.vim +++ /dev/null @@ -1,61 +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', - \ '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', - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[4], - \}) - endfor - - return l:output -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) - \ ? ale#path#FindNearestFile(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/pack/acp/start/ale/ale_linters/java/eclipselsp.vim b/pack/acp/start/ale/ale_linters/java/eclipselsp.vim deleted file mode 100644 index 2648893..0000000 --- a/pack/acp/start/ale/ale_linters/java/eclipselsp.vim +++ /dev/null @@ -1,161 +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') - -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) - - " Search jar file within repository path when manually built using mvn - let l:repo_path = l:path . '/org.eclipse.jdt.ls.product/target/repository' - let l:files = globpath(l:repo_path, '**/plugins/org.eclipse.equinox.launcher_\d\.\d\.\d\d\d\.*\.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, '**/plugins/org.eclipse.equinox.launcher_\d\.\d\.\d\d\d\.*\.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_\d\.\d\.\d\d\d\.*\.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#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), - \ '-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') - \) -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'), -\}) diff --git a/pack/acp/start/ale/ale_linters/java/javac.vim b/pack/acp/start/ale/ale_linters/java/javac.vim deleted file mode 100644 index 8bb52c0..0000000 --- a/pack/acp/start/ale/ale_linters/java/javac.vim +++ /dev/null @@ -1,139 +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', '') - -function! ale_linters#java#javac#RunWithImportPaths(buffer) abort - let l:command = '' - let l:pom_path = ale#path#FindNearestFile(a:buffer, 'pom.xml') - - if !empty(l:pom_path) && executable('mvn') - let l:command = ale#path#CdString(fnamemodify(l:pom_path, ':h')) - \ . 'mvn dependency:build-classpath' - endif - - " Try to use Gradle if Maven isn't available. - if empty(l:command) - let 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: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') - \) -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, 'java_javac_classpath'), s:classpath_sep), - \) - - 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 - - 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 ale#path#BufferCdString(a:buffer) - \ . '%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]) - let l:output[-1].col = len(l:match[1]) - 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')}, -\ 'command': function('ale_linters#java#javac#RunWithImportPaths'), -\ 'output_stream': 'stderr', -\ 'callback': 'ale_linters#java#javac#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/java/javalsp.vim b/pack/acp/start/ale/ale_linters/java/javalsp.vim deleted file mode 100644 index f56675d..0000000 --- a/pack/acp/start/ale/ale_linters/java/javalsp.vim +++ /dev/null @@ -1,41 +0,0 @@ -" Author: Horacio Sanson -" Description: Support for the Java language server https://github.com/georgewfraser/vscode-javac - -call ale#Set('java_javalsp_executable', '') - -function! ale_linters#java#javalsp#Executable(buffer) abort - return ale#Var(a:buffer, 'java_javalsp_executable') -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'), -\}) diff --git a/pack/acp/start/ale/ale_linters/java/pmd.vim b/pack/acp/start/ale/ale_linters/java/pmd.vim deleted file mode 100644 index a1f4c93..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/javascript/eslint.vim b/pack/acp/start/ale/ale_linters/javascript/eslint.vim deleted file mode 100644 index 31fb413..0000000 --- a/pack/acp/start/ale/ale_linters/javascript/eslint.vim +++ /dev/null @@ -1,10 +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'), -\ 'command': function('ale#handlers#eslint#GetCommand'), -\ 'callback': 'ale#handlers#eslint#HandleJSON', -\}) diff --git a/pack/acp/start/ale/ale_linters/javascript/fecs.vim b/pack/acp/start/ale/ale_linters/javascript/fecs.vim deleted file mode 100644 index e47c0a0..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/javascript/flow.vim b/pack/acp/start/ale/ale_linters/javascript/flow.vim deleted file mode 100755 index 3135e2e..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/javascript/flow_ls.vim b/pack/acp/start/ale/ale_linters/javascript/flow_ls.vim deleted file mode 100644 index accaaa7..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/javascript/jscs.vim b/pack/acp/start/ale/ale_linters/javascript/jscs.vim deleted file mode 100644 index 8905b3a..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'javascript_jscs', [ -\ 'node_modules/.bin/jscs', -\ ])}, -\ 'command': function('ale_linters#javascript#jscs#GetCommand'), -\ 'callback': 'ale_linters#javascript#jscs#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/javascript/jshint.vim b/pack/acp/start/ale/ale_linters/javascript/jshint.vim deleted file mode 100644 index d80a225..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'javascript_jshint', [ -\ 'node_modules/.bin/jshint', -\ ])}, -\ 'command': function('ale_linters#javascript#jshint#GetCommand'), -\ 'callback': 'ale#handlers#unix#HandleAsError', -\}) diff --git a/pack/acp/start/ale/ale_linters/javascript/standard.vim b/pack/acp/start/ale/ale_linters/javascript/standard.vim deleted file mode 100644 index 4cd2c30..0000000 --- a/pack/acp/start/ale/ale_linters/javascript/standard.vim +++ /dev/null @@ -1,30 +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#node#FindExecutable(a:buffer, 'javascript_standard', [ - \ 'node_modules/standard/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/pack/acp/start/ale/ale_linters/javascript/tsserver.vim b/pack/acp/start/ale/ale_linters/javascript/tsserver.vim deleted file mode 100644 index 68c252c..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'javascript_tsserver', [ -\ 'node_modules/.bin/tsserver', -\ ])}, -\ 'command': '%e', -\ 'project_root': function('ale#handlers#tsserver#GetProjectRoot'), -\ 'language': '', -\}) diff --git a/pack/acp/start/ale/ale_linters/javascript/xo.vim b/pack/acp/start/ale/ale_linters/javascript/xo.vim deleted file mode 100644 index e24f4a8..0000000 --- a/pack/acp/start/ale/ale_linters/javascript/xo.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Daniel Lupu -" Description: xo for JavaScript files - -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', '') - -function! ale_linters#javascript#xo#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'javascript_xo', [ - \ 'node_modules/.bin/xo', - \]) -endfunction - -function! ale_linters#javascript#xo#GetCommand(buffer) abort - return ale#Escape(ale_linters#javascript#xo#GetExecutable(a:buffer)) - \ . ' ' . ale#Var(a:buffer, 'javascript_xo_options') - \ . ' --reporter json --stdin --stdin-filename %s' -endfunction - -" xo uses eslint and the output format is the same -call ale#linter#Define('javascript', { -\ 'name': 'xo', -\ 'executable': function('ale_linters#javascript#xo#GetExecutable'), -\ 'command': function('ale_linters#javascript#xo#GetCommand'), -\ 'callback': 'ale#handlers#eslint#HandleJSON', -\}) diff --git a/pack/acp/start/ale/ale_linters/json/jsonlint.vim b/pack/acp/start/ale/ale_linters/json/jsonlint.vim deleted file mode 100644 index f677b48..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/julia/languageserver.vim b/pack/acp/start/ale/ale_linters/julia/languageserver.vim deleted file mode 100644 index 564bec3..0000000 --- a/pack/acp/start/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; server = LanguageServer.LanguageServerInstance(isdefined(Base, :stdin) ? stdin : STDIN, isdefined(Base, :stdout) ? stdout : STDOUT, false); server.runlinter = true; run(server);' - - return ale#Escape(l:julia_executable) . ' --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/pack/acp/start/ale/ale_linters/kotlin/kotlinc.vim b/pack/acp/start/ale/ale_linters/kotlin/kotlinc.vim deleted file mode 100644 index 3c6854f..0000000 --- a/pack/acp/start/ale/ale_linters/kotlin/kotlinc.vim +++ /dev/null @@ -1,180 +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 ale#Var(a:buffer, 'kotlin_kotlinc_classpath') isnot# '' - return ale_linters#kotlin#kotlinc#GetCommand(a:buffer, [], {}) - endif - - let l:pom_path = ale#path#FindNearestFile(a:buffer, 'pom.xml') - - if !empty(l:pom_path) && executable('mvn') - let l:command = ale#path#CdString(fnamemodify(l:pom_path, ':h')) - \ . 'mvn dependency:build-classpath' - endif - - " Try to use Gradle if Maven isn't available. - if empty(l:command) - let 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') - \) -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', -\ 'command': function('ale_linters#kotlin#kotlinc#RunWithImportPaths'), -\ 'callback': 'ale_linters#kotlin#kotlinc#Handle', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/kotlin/ktlint.vim b/pack/acp/start/ale/ale_linters/kotlin/ktlint.vim deleted file mode 100644 index f038400..0000000 --- a/pack/acp/start/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', -\ 'lint_file': 1 -\}) diff --git a/pack/acp/start/ale/ale_linters/kotlin/languageserver.vim b/pack/acp/start/ale/ale_linters/kotlin/languageserver.vim deleted file mode 100644 index af78c0e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/less/lessc.vim b/pack/acp/start/ale/ale_linters/less/lessc.vim deleted file mode 100755 index 4ec8b00..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/less/stylelint.vim b/pack/acp/start/ale/ale_linters/less/stylelint.vim deleted file mode 100644 index efb036c..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'less_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': function('ale_linters#less#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/llvm/llc.vim b/pack/acp/start/ale/ale_linters/llvm/llc.vim deleted file mode 100644 index 594be06..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/lua/luac.vim b/pack/acp/start/ale/ale_linters/lua/luac.vim deleted file mode 100644 index 41674a4..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/lua/luacheck.vim b/pack/acp/start/ale/ale_linters/lua/luacheck.vim deleted file mode 100644 index 34be2b5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/mail/alex.vim b/pack/acp/start/ale/ale_linters/mail/alex.vim deleted file mode 100644 index 0fceea7..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/mail/languagetool.vim b/pack/acp/start/ale/ale_linters/mail/languagetool.vim deleted file mode 100644 index 330fb8e..0000000 --- a/pack/acp/start/ale/ale_linters/mail/languagetool.vim +++ /dev/null @@ -1,5 +0,0 @@ -" Author: Vincent (wahrwolf [ät] wolfpit.net) -" Description: languagetool for mails - - -call ale#handlers#languagetool#DefineLinter('mail') diff --git a/pack/acp/start/ale/ale_linters/mail/proselint.vim b/pack/acp/start/ale/ale_linters/mail/proselint.vim deleted file mode 100644 index 82c8d1f..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/mail/vale.vim b/pack/acp/start/ale/ale_linters/mail/vale.vim deleted file mode 100644 index e6dfd2e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/make/checkmake.vim b/pack/acp/start/ale/ale_linters/make/checkmake.vim deleted file mode 100644 index 5ebdf91..0000000 --- a/pack/acp/start/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}}"', -\ 'callback': 'ale_linters#make#checkmake#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/markdown/alex.vim b/pack/acp/start/ale/ale_linters/markdown/alex.vim deleted file mode 100644 index 63769b5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/markdown/languagetool.vim b/pack/acp/start/ale/ale_linters/markdown/languagetool.vim deleted file mode 100644 index d6bca22..0000000 --- a/pack/acp/start/ale/ale_linters/markdown/languagetool.vim +++ /dev/null @@ -1,5 +0,0 @@ -" Author: Vincent (wahrwolf [ät] wolfpit.net) -" Description: languagetool for markdown files - - -call ale#handlers#languagetool#DefineLinter('markdown') diff --git a/pack/acp/start/ale/ale_linters/markdown/markdownlint.vim b/pack/acp/start/ale/ale_linters/markdown/markdownlint.vim deleted file mode 100644 index e935cbf..0000000 --- a/pack/acp/start/ale/ale_linters/markdown/markdownlint.vim +++ /dev/null @@ -1,11 +0,0 @@ -" Author: Ty-Lucas Kelley -" Description: Adds support for markdownlint - -call ale#linter#Define('markdown', { -\ 'name': 'markdownlint', -\ 'executable': 'markdownlint', -\ 'lint_file': 1, -\ 'output_stream': 'both', -\ 'command': 'markdownlint %s', -\ 'callback': 'ale#handlers#markdownlint#Handle' -\}) diff --git a/pack/acp/start/ale/ale_linters/markdown/mdl.vim b/pack/acp/start/ale/ale_linters/markdown/mdl.vim deleted file mode 100644 index 305f535..0000000 --- a/pack/acp/start/ale/ale_linters/markdown/mdl.vim +++ /dev/null @@ -1,44 +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 - \ . (!empty(l:options) ? ' ' . l:options : '') -endfunction - -function! ale_linters#markdown#mdl#Handle(buffer, lines) abort - " matches: '(stdin):173: MD004 Unordered list style' - 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, - \ 'text': l:match[2], - \ '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/pack/acp/start/ale/ale_linters/markdown/proselint.vim b/pack/acp/start/ale/ale_linters/markdown/proselint.vim deleted file mode 100644 index 289d881..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/markdown/redpen.vim b/pack/acp/start/ale/ale_linters/markdown/redpen.vim deleted file mode 100644 index ff2cbaf..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/markdown/remark_lint.vim b/pack/acp/start/ale/ale_linters/markdown/remark_lint.vim deleted file mode 100644 index ed87d1a..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/markdown/textlint.vim b/pack/acp/start/ale/ale_linters/markdown/textlint.vim deleted file mode 100644 index 613c841..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/markdown/vale.vim b/pack/acp/start/ale/ale_linters/markdown/vale.vim deleted file mode 100644 index 838c4db..0000000 --- a/pack/acp/start/ale/ale_linters/markdown/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('markdown', { -\ 'name': 'vale', -\ 'executable': 'vale', -\ 'command': 'vale --output=JSON %t', -\ 'callback': 'ale#handlers#vale#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/markdown/writegood.vim b/pack/acp/start/ale/ale_linters/markdown/writegood.vim deleted file mode 100644 index 7108e7a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/matlab/mlint.vim b/pack/acp/start/ale/ale_linters/matlab/mlint.vim deleted file mode 100644 index f58f8b6..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/mercury/mmc.vim b/pack/acp/start/ale/ale_linters/mercury/mmc.vim deleted file mode 100644 index 8a9ccc0..0000000 --- a/pack/acp/start/ale/ale_linters/mercury/mmc.vim +++ /dev/null @@ -1,40 +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 - let l:module_name = expand('#' . a:buffer . ':t:r') - - return ale#path#BufferCdString(a:buffer) - \ . '%e --errorcheck-only ' - \ . ale#Var(a:buffer, 'mercury_mmc_options') - \ . ' ' . l:module_name -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')}, -\ 'command': function('ale_linters#mercury#mmc#GetCommand'), -\ 'callback': 'ale_linters#mercury#mmc#Handle', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/nasm/nasm.vim b/pack/acp/start/ale/ale_linters/nasm/nasm.vim deleted file mode 100644 index 347abc1..0000000 --- a/pack/acp/start/ale/ale_linters/nasm/nasm.vim +++ /dev/null @@ -1,42 +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:path = fnamemodify(bufname(a:buffer), ':p:h') . l:separator - let l:output_null = has('win32') ? 'NUL' : '/dev/null' - - return '%e -X gnu -I ' . ale#Escape(l:path) - \ . 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/pack/acp/start/ale/ale_linters/nim/nimcheck.vim b/pack/acp/start/ale/ale_linters/nim/nimcheck.vim deleted file mode 100644 index b5796dc..0000000 --- a/pack/acp/start/ale/ale_linters/nim/nimcheck.vim +++ /dev/null @@ -1,65 +0,0 @@ -" Author: Baabelfish -" Description: Typechecking for nim files - -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 - - 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/pack/acp/start/ale/ale_linters/nix/nix.vim b/pack/acp/start/ale/ale_linters/nix/nix.vim deleted file mode 100644 index 0a0c5c3..0000000 --- a/pack/acp/start/ale/ale_linters/nix/nix.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Alistair Bill <@alibabzo> -" Description: nix-instantiate linter for nix files - -function! ale_linters#nix#nix#Handle(buffer, lines) abort - let l:pattern = '^\(.\+\): \(.\+\), at .*:\(\d\+\):\(\d\+\)$' - let l:output = [] - - 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] . ': ' . l:match[2], - \ 'type': l:match[1] =~# '^error' ? 'E' : 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('nix', { -\ 'name': 'nix', -\ 'output_stream': 'stderr', -\ 'executable': 'nix-instantiate', -\ 'command': 'nix-instantiate --parse -', -\ 'callback': 'ale_linters#nix#nix#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/nroff/alex.vim b/pack/acp/start/ale/ale_linters/nroff/alex.vim deleted file mode 100644 index 3f06af2..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/nroff/proselint.vim b/pack/acp/start/ale/ale_linters/nroff/proselint.vim deleted file mode 100644 index a23e56b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/nroff/writegood.vim b/pack/acp/start/ale/ale_linters/nroff/writegood.vim deleted file mode 100644 index bcf344f..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/objc/ccls.vim b/pack/acp/start/ale/ale_linters/objc/ccls.vim deleted file mode 100644 index 51ecf05..0000000 --- a/pack/acp/start/ale/ale_linters/objc/ccls.vim +++ /dev/null @@ -1,14 +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#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#Var(b, 'objc_ccls_init_options')}, -\}) diff --git a/pack/acp/start/ale/ale_linters/objc/clang.vim b/pack/acp/start/ale/ale_linters/objc/clang.vim deleted file mode 100644 index 7873dcc..0000000 --- a/pack/acp/start/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 ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p: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/pack/acp/start/ale/ale_linters/objc/clangd.vim b/pack/acp/start/ale/ale_linters/objc/clangd.vim deleted file mode 100644 index 318d85b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/objcpp/clang.vim b/pack/acp/start/ale/ale_linters/objcpp/clang.vim deleted file mode 100644 index 4dbe55b..0000000 --- a/pack/acp/start/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 ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p: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/pack/acp/start/ale/ale_linters/objcpp/clangd.vim b/pack/acp/start/ale/ale_linters/objcpp/clangd.vim deleted file mode 100644 index 2945532..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/ocaml/merlin.vim b/pack/acp/start/ale/ale_linters/ocaml/merlin.vim deleted file mode 100644 index cfec996..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/ocaml/ols.vim b/pack/acp/start/ale/ale_linters/ocaml/ols.vim deleted file mode 100644 index d8208c5..0000000 --- a/pack/acp/start/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_callback': 'ale#handlers#ols#GetLanguage', -\ 'project_root': function('ale#handlers#ols#GetProjectRoot'), -\}) diff --git a/pack/acp/start/ale/ale_linters/perl/perl.vim b/pack/acp/start/ale/ale_linters/perl/perl.vim deleted file mode 100644 index 0f06528..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/perl/perlcritic.vim b/pack/acp/start/ale/ale_linters/perl/perlcritic.vim deleted file mode 100644 index f3154c0..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/perl6/perl6.vim b/pack/acp/start/ale/ale_linters/perl6/perl6.vim deleted file mode 100644 index 68ef476..0000000 --- a/pack/acp/start/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/ - 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/pack/acp/start/ale/ale_linters/php/langserver.vim b/pack/acp/start/ale/ale_linters/php/langserver.vim deleted file mode 100644 index fdd1bf2..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'php_langserver', [ -\ 'vendor/bin/php-language-server.php', -\ ])}, -\ 'command': 'php %e', -\ 'project_root': function('ale_linters#php#langserver#GetProjectRoot'), -\}) diff --git a/pack/acp/start/ale/ale_linters/php/phan.vim b/pack/acp/start/ale/ale_linters/php/phan.vim deleted file mode 100644 index 53cb1ea..0000000 --- a/pack/acp/start/ale/ale_linters/php/phan.vim +++ /dev/null @@ -1,73 +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], - \ 'type': 'W', - \} - else - let l:dict = { - \ 'lnum': l:match[1] + 0, - \ 'text': l:match[3], - \ 'type': 'W', - \} - 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/pack/acp/start/ale/ale_linters/php/php.vim b/pack/acp/start/ale/ale_linters/php/php.vim deleted file mode 100644 index 51a109b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/php/phpcs.vim b/pack/acp/start/ale/ale_linters/php/phpcs.vim deleted file mode 100644 index 11b81e8..0000000 --- a/pack/acp/start/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 ale#path#BufferCdString(a:buffer) - \ . '%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#node#FindExecutable(b, 'php_phpcs', [ -\ 'vendor/bin/phpcs', -\ 'phpcs' -\ ])}, -\ 'command': function('ale_linters#php#phpcs#GetCommand'), -\ 'callback': 'ale_linters#php#phpcs#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/php/phpmd.vim b/pack/acp/start/ale/ale_linters/php/phpmd.vim deleted file mode 100644 index 9b1d1e4..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/php/phpstan.vim b/pack/acp/start/ale/ale_linters/php/phpstan.vim deleted file mode 100644 index 78f7dd1..0000000 --- a/pack/acp/start/ale/ale_linters/php/phpstan.vim +++ /dev/null @@ -1,74 +0,0 @@ -" Author: medains , ardis -" 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', '') - -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:level = ale#Var(a:buffer, 'php_phpstan_level') - let l:config_file_exists = ale#path#FindNearestFile(a:buffer, 'phpstan.neon') - - if empty(l:level) && empty(l: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 raw' - \ : ' --errorFormat raw' - - return '%e analyze --no-progress' - \ . l:error_format - \ . l:configuration_option - \ . l:autoload_option - \ . l:level_option - \ . ' %s' -endfunction - -function! ale_linters#php#phpstan#Handle(buffer, lines) abort - " Matches against lines like the following: - " - " filename.php:15:message - " C:\folder\filename.php:15:message - let l:pattern = '^\([a-zA-Z]:\)\?[^:]\+:\(\d\+\):\(.*\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[3], - \ 'type': 'E', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('php', { -\ 'name': 'phpstan', -\ 'executable': {b -> ale#Var(b, 'php_phpstan_executable')}, -\ 'command': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale#Var(buffer, 'php_phpstan_executable'), -\ '%e --version', -\ function('ale_linters#php#phpstan#GetCommand'), -\ )}, -\ 'callback': 'ale_linters#php#phpstan#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/php/psalm.vim b/pack/acp/start/ale/ale_linters/php/psalm.vim deleted file mode 100644 index 3cdb026..0000000 --- a/pack/acp/start/ale/ale_linters/php/psalm.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: Matt Brown -" Description: plugin for Psalm, static analyzer for PHP - -call ale#Set('psalm_langserver_executable', 'psalm-language-server') -call ale#Set('psalm_langserver_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#php#psalm#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('php', { -\ 'name': 'psalm', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#node#FindExecutable(b, 'psalm_langserver', [ -\ 'vendor/bin/psalm-language-server', -\ ])}, -\ 'command': '%e', -\ 'project_root': function('ale_linters#php#psalm#GetProjectRoot'), -\}) diff --git a/pack/acp/start/ale/ale_linters/po/alex.vim b/pack/acp/start/ale/ale_linters/po/alex.vim deleted file mode 100644 index 05c67f1..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/po/msgfmt.vim b/pack/acp/start/ale/ale_linters/po/msgfmt.vim deleted file mode 100644 index 8279ccd..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/po/proselint.vim b/pack/acp/start/ale/ale_linters/po/proselint.vim deleted file mode 100644 index ce13250..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/po/writegood.vim b/pack/acp/start/ale/ale_linters/po/writegood.vim deleted file mode 100644 index 1468647..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/pod/alex.vim b/pack/acp/start/ale/ale_linters/pod/alex.vim deleted file mode 100644 index c89f833..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/pod/proselint.vim b/pack/acp/start/ale/ale_linters/pod/proselint.vim deleted file mode 100644 index 2eb83f5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/pod/writegood.vim b/pack/acp/start/ale/ale_linters/pod/writegood.vim deleted file mode 100644 index 9f5461e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/pony/ponyc.vim b/pack/acp/start/ale/ale_linters/pony/ponyc.vim deleted file mode 100644 index 6d4594f..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/powershell/powershell.vim b/pack/acp/start/ale/ale_linters/powershell/powershell.vim deleted file mode 100755 index 51ded71..0000000 --- a/pack/acp/start/ale/ale_linters/powershell/powershell.vim +++ /dev/null @@ -1,91 +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); - \ 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 - - let l:item = { - \ 'lnum': str2nr(l:match[1]), - \ 'col': str2nr(l:match[2]), - \ 'type': 'E', - \} - 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_callback': 'ale_linters#powershell#powershell#GetExecutable', -\ 'command_callback': 'ale_linters#powershell#powershell#GetCommand', -\ 'output_stream': 'stdout', -\ 'callback': 'ale_linters#powershell#powershell#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/powershell/psscriptanalyzer.vim b/pack/acp/start/ale/ale_linters/powershell/psscriptanalyzer.vim deleted file mode 100644 index 4794d9d..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/prolog/swipl.vim b/pack/acp/start/ale/ale_linters/prolog/swipl.vim deleted file mode 100644 index 5c601c4..0000000 --- a/pack/acp/start/ale/ale_linters/prolog/swipl.vim +++ /dev/null @@ -1,100 +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:pattern = '\v^(ERROR|Warning)+%(:\s*[^:]+:(\d+)%(:(\d+))?)?:\s*(.*)$' - let l:output = [] - let l:i = 0 - - 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 = [] - - while l:i < len(a:lines) && a:lines[l:i] =~# '^\s' - call add(l:text, s:Trim(a:lines[l:i])) - 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/pack/acp/start/ale/ale_linters/proto/protoc_gen_lint.vim b/pack/acp/start/ale/ale_linters/proto/protoc_gen_lint.vim deleted file mode 100644 index c3d1093..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/pug/puglint.vim b/pack/acp/start/ale/ale_linters/pug/puglint.vim deleted file mode 100644 index c819cc4..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/puppet/languageserver.vim b/pack/acp/start/ale/ale_linters/puppet/languageserver.vim deleted file mode 100644 index 2078695..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/puppet/puppet.vim b/pack/acp/start/ale/ale_linters/puppet/puppet.vim deleted file mode 100644 index ae64861..0000000 --- a/pack/acp/start/ale/ale_linters/puppet/puppet.vim +++ /dev/null @@ -1,37 +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) - 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[4] + 0, - \ 'col': l:match[6] + 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/pack/acp/start/ale/ale_linters/puppet/puppetlint.vim b/pack/acp/start/ale/ale_linters/puppet/puppetlint.vim deleted file mode 100644 index 985d6a4..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/pyrex/cython.vim b/pack/acp/start/ale/ale_linters/pyrex/cython.vim deleted file mode 100644 index 84382ba..0000000 --- a/pack/acp/start/ale/ale_linters/pyrex/cython.vim +++ /dev/null @@ -1,38 +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 - let l:local_dir = ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) - - return '%e --working ' . l:local_dir . ' --include-dir ' . l:local_dir - \ . 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/pack/acp/start/ale/ale_linters/python/bandit.vim b/pack/acp/start/ale/ale_linters/python/bandit.vim deleted file mode 100644 index 554f500..0000000 --- a/pack/acp/start/ale/ale_linters/python/bandit.vim +++ /dev/null @@ -1,68 +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) - -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 - - 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$' - \ ? ' 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/pack/acp/start/ale/ale_linters/python/flake8.vim b/pack/acp/start/ale/ale_linters/python/flake8.vim deleted file mode 100644 index e2e7b74..0000000 --- a/pack/acp/start/ale/ale_linters/python/flake8.vim +++ /dev/null @@ -1,146 +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', 1) -call ale#Set('python_flake8_auto_pipenv', 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 !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#GetCommand(buffer, version) abort - let l:cd_string = ale#Var(a:buffer, 'python_flake8_change_directory') - \ ? ale#path#BufferCdString(a:buffer) - \ : '' - let l:executable = ale_linters#python#flake8#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv$' - \ ? ' 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 l:cd_string - \ . 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'), -\ 'command': function('ale_linters#python#flake8#RunWithVersionCheck'), -\ 'callback': 'ale_linters#python#flake8#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/python/mypy.vim b/pack/acp/start/ale/ale_linters/python/mypy.vim deleted file mode 100644 index c4c6507..0000000 --- a/pack/acp/start/ale/ale_linters/python/mypy.vim +++ /dev/null @@ -1,81 +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_options', '') -call ale#Set('python_mypy_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_mypy_auto_pipenv', 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 - - return ale#python#FindExecutable(a:buffer, 'python_mypy', ['mypy']) -endfunction - -" The directory to change to before running mypy -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#mypy#GetCommand(buffer) abort - let l:dir = s:GetDir(a:buffer) - let l:executable = ale_linters#python#mypy#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv$' - \ ? ' run mypy' - \ : '' - - " We have to always switch to an explicit directory for a command so - " we can know with certainty the base path for the 'filename' keys below. - return ale#path#CdString(l:dir) - \ . ale#Escape(l:executable) . l:exec_args - \ . ' --show-column-numbers ' - \ . ale#Var(a:buffer, 'python_mypy_options') - \ . ' --shadow-file %s %t %s' -endfunction - -function! ale_linters#python#mypy#Handle(buffer, lines) abort - let l:dir = s:GetDir(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:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?: (error|warning): (.+)$' - 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' : 'W', - \ 'text': l:match[5], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'mypy', -\ 'executable': function('ale_linters#python#mypy#GetExecutable'), -\ 'command': function('ale_linters#python#mypy#GetCommand'), -\ 'callback': 'ale_linters#python#mypy#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/python/prospector.vim b/pack/acp/start/ale/ale_linters/python/prospector.vim deleted file mode 100644 index ee47012..0000000 --- a/pack/acp/start/ale/ale_linters/python/prospector.vim +++ /dev/null @@ -1,100 +0,0 @@ -" Author: chocoelho -" Description: prospector linter python files - -call ale#Set('python_prospector_auto_pipenv', 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 - - 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$' - \ ? ' 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/pack/acp/start/ale/ale_linters/python/pycodestyle.vim b/pack/acp/start/ale/ale_linters/python/pycodestyle.vim deleted file mode 100644 index fb521bc..0000000 --- a/pack/acp/start/ale/ale_linters/python/pycodestyle.vim +++ /dev/null @@ -1,75 +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) - -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 - - 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$' - \ ? ' 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/pack/acp/start/ale/ale_linters/python/pydocstyle.vim b/pack/acp/start/ale/ale_linters/python/pydocstyle.vim deleted file mode 100644 index 3901db4..0000000 --- a/pack/acp/start/ale/ale_linters/python/pydocstyle.vim +++ /dev/null @@ -1,73 +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) - -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 - - return ale#python#FindExecutable(a:buffer, 'python_pydocstyle', ['pydocstyle']) -endfunction - -function! ale_linters#python#pydocstyle#GetCommand(buffer) abort - let l:dir = fnamemodify(bufname(a:buffer), ':p:h') - let l:executable = ale_linters#python#pydocstyle#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv$' - \ ? ' run pydocstyle' - \ : '' - - return ale#path#CdString(l:dir) - \ . ale#Escape(l:executable) . l:exec_args - \ . ' ' . ale#Var(a:buffer, 'python_pydocstyle_options') - \ . ' ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:t')) -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'), -\ 'command': function('ale_linters#python#pydocstyle#GetCommand'), -\ 'callback': 'ale_linters#python#pydocstyle#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/python/pyflakes.vim b/pack/acp/start/ale/ale_linters/python/pyflakes.vim deleted file mode 100644 index b512702..0000000 --- a/pack/acp/start/ale/ale_linters/python/pyflakes.vim +++ /dev/null @@ -1,50 +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) - -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 - - 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$' - \ ? ' 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/pack/acp/start/ale/ale_linters/python/pylama.vim b/pack/acp/start/ale/ale_linters/python/pylama.vim deleted file mode 100644 index 38dd283..0000000 --- a/pack/acp/start/ale/ale_linters/python/pylama.vim +++ /dev/null @@ -1,92 +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_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 - - return ale#python#FindExecutable(a:buffer, 'python_pylama', ['pylama']) -endfunction - -function! ale_linters#python#pylama#GetCommand(buffer) abort - let l:cd_string = '' - - 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) - let l:cd_string = l:project_root isnot# '' - \ ? ale#path#CdString(l:project_root) - \ : ale#path#BufferCdString(a:buffer) - endif - - let l:executable = ale_linters#python#pylama#GetExecutable(a:buffer) - let l:exec_args = l:executable =~? 'pipenv$' - \ ? ' run pylama' - \ : '' - - " 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 l:cd_string - \ . ale#Escape(l:executable) . l:exec_args - \ . ale#Pad(ale#Var(a:buffer, 'python_pylama_options')) - \ . ' %s' -endfunction - -function! ale_linters#python#pylama#Handle(buffer, lines) abort - if empty(a:lines) - return [] - endif - - let l:output = ale#python#HandleTraceback(a:lines, 1) - let l:pattern = '\v^.{-}:([0-9]+):([0-9]+): +%(([A-Z][0-9]+):? +)?(.*)$' - - " 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', - \} - - 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 - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pylama', -\ 'executable': function('ale_linters#python#pylama#GetExecutable'), -\ 'command': function('ale_linters#python#pylama#GetCommand'), -\ 'callback': 'ale_linters#python#pylama#Handle', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/python/pylint.vim b/pack/acp/start/ale/ale_linters/python/pylint.vim deleted file mode 100644 index b16d535..0000000 --- a/pack/acp/start/ale/ale_linters/python/pylint.vim +++ /dev/null @@ -1,92 +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_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 - - return ale#python#FindExecutable(a:buffer, 'python_pylint', ['pylint']) -endfunction - -function! ale_linters#python#pylint#GetCommand(buffer) abort - let l:cd_string = '' - - 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) - let l:cd_string = l:project_root isnot# '' - \ ? ale#path#CdString(l:project_root) - \ : ale#path#BufferCdString(a:buffer) - endif - - let l:executable = ale_linters#python#pylint#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv$' - \ ? ' run pylint' - \ : '' - - return l:cd_string - \ . ale#Escape(l:executable) . l:exec_args - \ . ' ' . ale#Var(a:buffer, 'python_pylint_options') - \ . ' --output-format text --msg-template="{path}:{line}:{column}: {msg_id} ({symbol}) {msg}" --reports n' - \ . ' %s' -endfunction - -function! ale_linters#python#pylint#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " test.py:4:4: W0101 (unreachable) Unreachable code - let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+): ([[:alnum:]]+) \(([^(]*)\) (.*)$' - let l:output = [] - - 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 - - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 1, - \ 'text': l:match[5], - \ 'code': l:code_out, - \ 'type': l:code[:0] is# 'E' ? 'E' : 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pylint', -\ 'executable': function('ale_linters#python#pylint#GetExecutable'), -\ 'command': function('ale_linters#python#pylint#GetCommand'), -\ 'callback': 'ale_linters#python#pylint#Handle', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/python/pyls.vim b/pack/acp/start/ale/ale_linters/python/pyls.vim deleted file mode 100644 index c7f9143..0000000 --- a/pack/acp/start/ale/ale_linters/python/pyls.vim +++ /dev/null @@ -1,36 +0,0 @@ -" Author: aurieh -" Description: A language server for Python - -call ale#Set('python_pyls_executable', 'pyls') -call ale#Set('python_pyls_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_pyls_auto_pipenv', 0) -call ale#Set('python_pyls_config', {}) - -function! ale_linters#python#pyls#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pyls_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - return ale#python#FindExecutable(a:buffer, 'python_pyls', ['pyls']) -endfunction - -function! ale_linters#python#pyls#GetCommand(buffer) abort - let l:executable = ale_linters#python#pyls#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv$' - \ ? ' run pyls' - \ : '' - - return ale#Escape(l:executable) . l:exec_args -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pyls', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#python#pyls#GetExecutable'), -\ 'command': function('ale_linters#python#pyls#GetCommand'), -\ 'project_root': function('ale#python#FindProjectRoot'), -\ 'completion_filter': 'ale#completion#python#CompletionItemFilter', -\ 'lsp_config': {b -> ale#Var(b, 'python_pyls_config')}, -\}) diff --git a/pack/acp/start/ale/ale_linters/python/pyre.vim b/pack/acp/start/ale/ale_linters/python/pyre.vim deleted file mode 100644 index 4edd80f..0000000 --- a/pack/acp/start/ale/ale_linters/python/pyre.vim +++ /dev/null @@ -1,34 +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) - -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 - - 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$' - \ ? ' run pyre persistent' - \ : ' persistent' - - return ale#Escape(l:executable) . l:exec_args -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', -\}) diff --git a/pack/acp/start/ale/ale_linters/python/vulture.vim b/pack/acp/start/ale/ale_linters/python/vulture.vim deleted file mode 100644 index d328d26..0000000 --- a/pack/acp/start/ale/ale_linters/python/vulture.vim +++ /dev/null @@ -1,80 +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#GetCommand(buffer) abort - let l:change_dir = ale#Var(a:buffer, 'python_vulture_change_directory') - \ ? ale#path#CdString(s:GetDir(a:buffer)) - \ : '' - - let l:executable = ale_linters#python#vulture#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv$' - \ ? ' run vulture' - \ : '' - - let l:lint_dest = ale#Var(a:buffer, 'python_vulture_change_directory') - \ ? ' .' - \ : ' %s' - - return l:change_dir - \ . 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'), -\ 'command': function('ale_linters#python#vulture#GetCommand'), -\ 'callback': 'ale_linters#python#vulture#Handle', -\ 'lint_file': 1, -\}) diff --git a/pack/acp/start/ale/ale_linters/qml/qmlfmt.vim b/pack/acp/start/ale/ale_linters/qml/qmlfmt.vim deleted file mode 100644 index 11cc941..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/qml/qmllint.vim b/pack/acp/start/ale/ale_linters/qml/qmllint.vim deleted file mode 100644 index c2258a1..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/r/lintr.vim b/pack/acp/start/ale/ale_linters/r/lintr.vim deleted file mode 100644 index 3164c06..0000000 --- a/pack/acp/start/ale/ale_linters/r/lintr.vim +++ /dev/null @@ -1,35 +0,0 @@ -" Author: Michel Lang , w0rp , -" Fenner Macrae -" 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 ale#path#BufferCdString(a:buffer) - \ . 'Rscript --vanilla -e ' - \ . ale#Escape(l:cmd_string) . ' %t' -endfunction - -call ale#linter#Define('r', { -\ 'name': 'lintr', -\ 'executable': 'Rscript', -\ 'command': function('ale_linters#r#lintr#GetCommand'), -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\ 'output_stream': 'both', -\}) diff --git a/pack/acp/start/ale/ale_linters/racket/raco.vim b/pack/acp/start/ale/ale_linters/racket/raco.vim deleted file mode 100644 index e5ee4fb..0000000 --- a/pack/acp/start/ale/ale_linters/racket/raco.vim +++ /dev/null @@ -1,33 +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, { - \ '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/pack/acp/start/ale/ale_linters/reason/ls.vim b/pack/acp/start/ale/ale_linters/reason/ls.vim deleted file mode 100644 index fb1114a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/reason/merlin.vim b/pack/acp/start/ale/ale_linters/reason/merlin.vim deleted file mode 100644 index 7bef7df..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/reason/ols.vim b/pack/acp/start/ale/ale_linters/reason/ols.vim deleted file mode 100644 index 66137e1..0000000 --- a/pack/acp/start/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_callback': 'ale#handlers#ols#GetLanguage', -\ 'project_root': function('ale#handlers#ols#GetProjectRoot'), -\}) diff --git a/pack/acp/start/ale/ale_linters/review/redpen.vim b/pack/acp/start/ale/ale_linters/review/redpen.vim deleted file mode 100644 index 0006cab..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/rst/alex.vim b/pack/acp/start/ale/ale_linters/rst/alex.vim deleted file mode 100644 index e7ca6fa..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/rst/proselint.vim b/pack/acp/start/ale/ale_linters/rst/proselint.vim deleted file mode 100644 index 018347a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/rst/redpen.vim b/pack/acp/start/ale/ale_linters/rst/redpen.vim deleted file mode 100644 index ac966c5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/rst/rstcheck.vim b/pack/acp/start/ale/ale_linters/rst/rstcheck.vim deleted file mode 100644 index 39e11d6..0000000 --- a/pack/acp/start/ale/ale_linters/rst/rstcheck.vim +++ /dev/null @@ -1,38 +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 - -function! ale_linters#rst#rstcheck#GetCommand(buffer) abort - return ale#path#BufferCdString(a:buffer) - \ . 'rstcheck' - \ . ' %t' -endfunction - - -call ale#linter#Define('rst', { -\ 'name': 'rstcheck', -\ 'executable': 'rstcheck', -\ 'command': function('ale_linters#rst#rstcheck#GetCommand'), -\ 'callback': 'ale_linters#rst#rstcheck#Handle', -\ 'output_stream': 'both', -\}) diff --git a/pack/acp/start/ale/ale_linters/rst/textlint.vim b/pack/acp/start/ale/ale_linters/rst/textlint.vim deleted file mode 100644 index 56dd8db..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/rst/vale.vim b/pack/acp/start/ale/ale_linters/rst/vale.vim deleted file mode 100644 index 2e654dc..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/rst/writegood.vim b/pack/acp/start/ale/ale_linters/rst/writegood.vim deleted file mode 100644 index 26b1152..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/ruby/brakeman.vim b/pack/acp/start/ale/ale_linters/ruby/brakeman.vim deleted file mode 100644 index a808808..0000000 --- a/pack/acp/start/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#handlers#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/pack/acp/start/ale/ale_linters/ruby/rails_best_practices.vim b/pack/acp/start/ale/ale_linters/ruby/rails_best_practices.vim deleted file mode 100644 index a94fb67..0000000 --- a/pack/acp/start/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#handlers#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/pack/acp/start/ale/ale_linters/ruby/reek.vim b/pack/acp/start/ale/ale_linters/ruby/reek.vim deleted file mode 100644 index e39e366..0000000 --- a/pack/acp/start/ale/ale_linters/ruby/reek.vim +++ /dev/null @@ -1,65 +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#handlers#ruby#EscapeExecutable(l:executable, 'reek') - \ . ' -f json --no-progress --no-color --force-exclusion' - \ . l:display_name_args -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, '[' . a:error.wiki_link . ']') - 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/pack/acp/start/ale/ale_linters/ruby/rubocop.vim b/pack/acp/start/ale/ale_linters/ruby/rubocop.vim deleted file mode 100644 index 8b9e9c8..0000000 --- a/pack/acp/start/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#handlers#ruby#EscapeExecutable(l:executable, 'rubocop') - \ . ' --format json --force-exclusion ' - \ . ale#Var(a:buffer, 'ruby_rubocop_options') - \ . ' --stdin ' . ale#Escape(expand('#' . a:buffer . ':p')) -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/pack/acp/start/ale/ale_linters/ruby/ruby.vim b/pack/acp/start/ale/ale_linters/ruby/ruby.vim deleted file mode 100644 index 2dc55eb..0000000 --- a/pack/acp/start/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 -T1 %t', -\ 'output_stream': 'stderr', -\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors', -\}) diff --git a/pack/acp/start/ale/ale_linters/ruby/solargraph.vim b/pack/acp/start/ale/ale_linters/ruby/solargraph.vim deleted file mode 100644 index bf54a55..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/ruby/standardrb.vim b/pack/acp/start/ale/ale_linters/ruby/standardrb.vim deleted file mode 100644 index f075a7d..0000000 --- a/pack/acp/start/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#handlers#ruby#EscapeExecutable(l:executable, 'standardrb') - \ . ' --format json --force-exclusion ' - \ . ale#Var(a:buffer, 'ruby_standardrb_options') - \ . ' --stdin ' . ale#Escape(expand('#' . a:buffer . ':p')) -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/pack/acp/start/ale/ale_linters/rust/cargo.vim b/pack/acp/start/ale/ale_linters/rust/cargo.vim deleted file mode 100644 index f98dee9..0000000 --- a/pack/acp/start/ale/ale_linters/rust/cargo.vim +++ /dev/null @@ -1,98 +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', '') - -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#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 = l:use_check - \ && ale#Var(a:buffer, 'rust_cargo_check_all_targets') - \ && ale#semver#GTE(a:version, [0, 22, 0]) - let l:use_examples = l:use_check - \ && ale#Var(a:buffer, 'rust_cargo_check_examples') - \ && ale#semver#GTE(a:version, [0, 22, 0]) - let l:use_tests = l:use_check - \ && ale#Var(a:buffer, 'rust_cargo_check_tests') - \ && ale#semver#GTE(a:version, [0, 22, 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:avoid_whole_workspace = ale#Var(a:buffer, 'rust_cargo_avoid_whole_workspace') - let l:nearest_cargo_prefix = '' - - if l: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# '.' - let l:nearest_cargo_prefix = 'cd '. ale#Escape(l:nearest_cargo_dir) .' && ' - endif - 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') - endif - - return l:nearest_cargo_prefix . 'cargo ' - \ . l:subcommand - \ . (l:use_all_targets ? ' --all-targets' : '') - \ . (l:use_examples ? ' --examples' : '') - \ . (l:use_tests ? ' --tests' : '') - \ . ' --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'), -\ '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/pack/acp/start/ale/ale_linters/rust/rls.vim b/pack/acp/start/ale/ale_linters/rust/rls.vim deleted file mode 100644 index 111d755..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/rust/rustc.vim b/pack/acp/start/ale/ale_linters/rust/rustc.vim deleted file mode 100644 index f140b58..0000000 --- a/pack/acp/start/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', '-Z no-codegen') - -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/pack/acp/start/ale/ale_linters/sass/sasslint.vim b/pack/acp/start/ale/ale_linters/sass/sasslint.vim deleted file mode 100644 index 17cd366..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/sass/stylelint.vim b/pack/acp/start/ale/ale_linters/sass/stylelint.vim deleted file mode 100644 index 7b14c6b..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'sass_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': '%e --stdin-filename %s', -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/scala/fsc.vim b/pack/acp/start/ale/ale_linters/scala/fsc.vim deleted file mode 100644 index 9413523..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/scala/sbtserver.vim b/pack/acp/start/ale/ale_linters/scala/sbtserver.vim deleted file mode 100644 index d4f137c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/scala/scalac.vim b/pack/acp/start/ale/ale_linters/scala/scalac.vim deleted file mode 100644 index 1dd579b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/scala/scalastyle.vim b/pack/acp/start/ale/ale_linters/scala/scalastyle.vim deleted file mode 100644 index 6e9e4c1..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/scss/sasslint.vim b/pack/acp/start/ale/ale_linters/scss/sasslint.vim deleted file mode 100644 index cf13546..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/scss/scsslint.vim b/pack/acp/start/ale/ale_linters/scss/scsslint.vim deleted file mode 100644 index 7ce5724..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/scss/stylelint.vim b/pack/acp/start/ale/ale_linters/scss/stylelint.vim deleted file mode 100644 index b5b2153..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'scss_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': function('ale_linters#scss#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/sh/language_server.vim b/pack/acp/start/ale/ale_linters/sh/language_server.vim deleted file mode 100644 index 5a3b0e9..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/sh/shell.vim b/pack/acp/start/ale/ale_linters/sh/shell.vim deleted file mode 100644 index 189dc21..0000000 --- a/pack/acp/start/ale/ale_linters/sh/shell.vim +++ /dev/null @@ -1,57 +0,0 @@ -" Author: w0rp -" Description: Lints sh files using bash -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' - " sh: 11: Syntax error: "(" unexpected - let l:pattern = '\v(line |: ?)(\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/pack/acp/start/ale/ale_linters/sh/shellcheck.vim b/pack/acp/start/ale/ale_linters/sh/shellcheck.vim deleted file mode 100644 index 1d8b609..0000000 --- a/pack/acp/start/ale/ale_linters/sh/shellcheck.vim +++ /dev/null @@ -1,107 +0,0 @@ -" Author: w0rp -" Description: This file adds support for using the shellcheck linter with -" shell scripts. - -" 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) - -function! ale_linters#sh#shellcheck#GetDialectArgument(buffer) abort - let l:shell_type = ale#handlers#sh#GetShellType(a:buffer) - - 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 - - " If there's no hashbang, try using Vim's buffer variables. - if getbufvar(a:buffer, 'is_bash', 0) - return 'bash' - elseif getbufvar(a:buffer, 'is_sh', 0) - return 'sh' - elseif getbufvar(a:buffer, 'is_kornshell', 0) - return 'ksh' - endif - - return '' -endfunction - -function! ale_linters#sh#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' : '' - let l:cd_string = ale#Var(a:buffer, 'sh_shellcheck_change_directory') - \ ? ale#path#BufferCdString(a:buffer) - \ : '' - - if l:dialect is# 'auto' - let l:dialect = ale_linters#sh#shellcheck#GetDialectArgument(a:buffer) - endif - - return l:cd_string - \ . '%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_linters#sh#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 - -call ale#linter#Define('sh', { -\ 'name': 'shellcheck', -\ 'executable': {buffer -> ale#Var(buffer, 'sh_shellcheck_executable')}, -\ 'command': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale#Var(buffer, 'sh_shellcheck_executable'), -\ '%e --version', -\ function('ale_linters#sh#shellcheck#GetCommand'), -\ )}, -\ 'callback': 'ale_linters#sh#shellcheck#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/slim/slimlint.vim b/pack/acp/start/ale/ale_linters/slim/slimlint.vim deleted file mode 100644 index 1b365e2..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/sml/smlnj.vim b/pack/acp/start/ale/ale_linters/sml/smlnj.vim deleted file mode 100644 index 852ea17..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/sml/smlnj_cm.vim b/pack/acp/start/ale/ale_linters/sml/smlnj_cm.vim deleted file mode 100644 index 9ad24af..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/solidity/solhint.vim b/pack/acp/start/ale/ale_linters/solidity/solhint.vim deleted file mode 100644 index 8ea33e0..0000000 --- a/pack/acp/start/ale/ale_linters/solidity/solhint.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: Franco Victorio - https://github.com/fvictorio -" Description: Report errors in Solidity code with solhint - -function! ale_linters#solidity#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:pattern = '\v^[^:]+: line (\d+), col (\d+), (Error|Warning) - (.*) \((.*)\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l: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 - - return l:output -endfunction - -call ale#linter#Define('solidity', { -\ 'name': 'solhint', -\ 'executable': 'solhint', -\ 'command': 'solhint --formatter compact %t', -\ 'callback': 'ale_linters#solidity#solhint#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/solidity/solium.vim b/pack/acp/start/ale/ale_linters/solidity/solium.vim deleted file mode 100644 index 61ab184..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/spec/rpmlint.vim b/pack/acp/start/ale/ale_linters/spec/rpmlint.vim deleted file mode 100644 index 92ef4d6..0000000 --- a/pack/acp/start/ale/ale_linters/spec/rpmlint.vim +++ /dev/null @@ -1,78 +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) abort - return '%e' - \ . ale#Pad(ale#Var(a:buffer, 'spec_rpmlint_options')) - \ . ' -o "NetworkEnabled False"' - \ . ' -v' - \ . ' %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': function('ale_linters#spec#rpmlint#GetCommand'), -\ 'callback': 'ale_linters#spec#rpmlint#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/sql/sqlint.vim b/pack/acp/start/ale/ale_linters/sql/sqlint.vim deleted file mode 100644 index ca89372..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/stylus/stylelint.vim b/pack/acp/start/ale/ale_linters/stylus/stylelint.vim deleted file mode 100644 index ce6f942..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'stylus_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': function('ale_linters#stylus#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/sugarss/stylelint.vim b/pack/acp/start/ale/ale_linters/sugarss/stylelint.vim deleted file mode 100644 index 6c705e4..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'sugarss_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': function('ale_linters#sugarss#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/pack/acp/start/ale/ale_linters/swift/sourcekitlsp.vim b/pack/acp/start/ale/ale_linters/swift/sourcekitlsp.vim deleted file mode 100644 index 560893b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/swift/swiftlint.vim b/pack/acp/start/ale/ale_linters/swift/swiftlint.vim deleted file mode 100644 index 237c45d..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/ale_linters/tcl/nagelfar.vim b/pack/acp/start/ale/ale_linters/tcl/nagelfar.vim deleted file mode 100644 index 5a4940e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/terraform/terraform.vim b/pack/acp/start/ale/ale_linters/terraform/terraform.vim deleted file mode 100755 index 0429cb7..0000000 --- a/pack/acp/start/ale/ale_linters/terraform/terraform.vim +++ /dev/null @@ -1,49 +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)) - \ . ' fmt -no-color --check=true -' -endfunction - -function! ale_linters#terraform#terraform#Handle(buffer, lines) abort - let l:head = '^Error running fmt: In : ' - let l:output = [] - let l:patterns = [ - \ l:head.'At \(\d\+\):\(\d\+\): \(.*\)$', - \ l:head.'\(.*\)$' - \] - - for l:match in ale#util#GetMatches(a:lines, l:patterns) - if len(l:match[2]) > 0 - call add(l:output, { - \ 'lnum': str2nr(l:match[1]), - \ 'col': str2nr(l:match[2]), - \ 'text': l:match[3], - \ 'type': 'E', - \}) - else - call add(l:output, { - \ 'lnum': line('$'), - \ 'text': l:match[1], - \ 'type': 'E', - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('terraform', { -\ 'name': 'terraform', -\ 'output_stream': 'stderr', -\ 'executable': function('ale_linters#terraform#terraform#GetExecutable'), -\ 'command': function('ale_linters#terraform#terraform#GetCommand'), -\ 'callback': 'ale_linters#terraform#terraform#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/terraform/tflint.vim b/pack/acp/start/ale/ale_linters/terraform/tflint.vim deleted file mode 100644 index 6d54a8b..0000000 --- a/pack/acp/start/ale/ale_linters/terraform/tflint.vim +++ /dev/null @@ -1,58 +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 = [] - - for l:error in ale#util#FuzzyJSONDecode(a:lines, []) - 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 - - 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 %t' - - return l:cmd -endfunction - -call ale#linter#Define('terraform', { -\ 'name': 'tflint', -\ 'executable': {b -> ale#Var(b, 'terraform_tflint_executable')}, -\ 'command': function('ale_linters#terraform#tflint#GetCommand'), -\ 'callback': 'ale_linters#terraform#tflint#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/testft/testlinter.vim b/pack/acp/start/ale/ale_linters/testft/testlinter.vim deleted file mode 100644 index 65e0b20..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/tex/alex.vim b/pack/acp/start/ale/ale_linters/tex/alex.vim deleted file mode 100644 index 5d9aec6..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/tex/chktex.vim b/pack/acp/start/ale/ale_linters/tex/chktex.vim deleted file mode 100644 index 160baf0..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/tex/lacheck.vim b/pack/acp/start/ale/ale_linters/tex/lacheck.vim deleted file mode 100644 index 19d6940..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/tex/proselint.vim b/pack/acp/start/ale/ale_linters/tex/proselint.vim deleted file mode 100644 index 35e764e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/tex/redpen.vim b/pack/acp/start/ale/ale_linters/tex/redpen.vim deleted file mode 100644 index 952a600..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/tex/texlab.vim b/pack/acp/start/ale/ale_linters/tex/texlab.vim deleted file mode 100644 index 5ead74b..0000000 --- a/pack/acp/start/ale/ale_linters/tex/texlab.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: Ricardo Liang -" Description: Texlab language server (Rust rewrite) - -call ale#Set('tex_texlab_executable', 'texlab') -call ale#Set('tex_texlab_options', '') - -function! ale_linters#tex#texlab#GetProjectRoot(buffer) abort - return '' -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'), -\}) diff --git a/pack/acp/start/ale/ale_linters/tex/textlint.vim b/pack/acp/start/ale/ale_linters/tex/textlint.vim deleted file mode 100644 index 5edac46..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/tex/vale.vim b/pack/acp/start/ale/ale_linters/tex/vale.vim deleted file mode 100644 index f64e72a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/tex/writegood.vim b/pack/acp/start/ale/ale_linters/tex/writegood.vim deleted file mode 100644 index c1aeace..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/texinfo/alex.vim b/pack/acp/start/ale/ale_linters/texinfo/alex.vim deleted file mode 100644 index 4d24552..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/texinfo/proselint.vim b/pack/acp/start/ale/ale_linters/texinfo/proselint.vim deleted file mode 100644 index 003e3a0..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/texinfo/writegood.vim b/pack/acp/start/ale/ale_linters/texinfo/writegood.vim deleted file mode 100644 index 4427f05..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/text/alex.vim b/pack/acp/start/ale/ale_linters/text/alex.vim deleted file mode 100644 index d87ed91..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/text/languagetool.vim b/pack/acp/start/ale/ale_linters/text/languagetool.vim deleted file mode 100644 index 58c99ba..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/text/proselint.vim b/pack/acp/start/ale/ale_linters/text/proselint.vim deleted file mode 100644 index 281b4ff..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/text/redpen.vim b/pack/acp/start/ale/ale_linters/text/redpen.vim deleted file mode 100644 index ec4433b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/text/textlint.vim b/pack/acp/start/ale/ale_linters/text/textlint.vim deleted file mode 100644 index 67c4e37..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/text/vale.vim b/pack/acp/start/ale/ale_linters/text/vale.vim deleted file mode 100644 index cf37c2f..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/text/writegood.vim b/pack/acp/start/ale/ale_linters/text/writegood.vim deleted file mode 100644 index 81b935d..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/thrift/thrift.vim b/pack/acp/start/ale/ale_linters/thrift/thrift.vim deleted file mode 100644 index 345c7ab..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/typescript/eslint.vim b/pack/acp/start/ale/ale_linters/typescript/eslint.vim deleted file mode 100644 index 33a2144..0000000 --- a/pack/acp/start/ale/ale_linters/typescript/eslint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: w0rp -" Description: eslint for JavaScript files - -call ale#linter#Define('typescript', { -\ 'name': 'eslint', -\ 'executable': function('ale#handlers#eslint#GetExecutable'), -\ 'command': function('ale#handlers#eslint#GetCommand'), -\ 'callback': 'ale#handlers#eslint#HandleJSON', -\}) diff --git a/pack/acp/start/ale/ale_linters/typescript/tslint.vim b/pack/acp/start/ale/ale_linters/typescript/tslint.vim deleted file mode 100644 index f70c2e4..0000000 --- a/pack/acp/start/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#path#BufferCdString(a:buffer) - \ . 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'), -\ 'command': function('ale_linters#typescript#tslint#GetCommand'), -\ 'callback': 'ale_linters#typescript#tslint#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/typescript/tsserver.vim b/pack/acp/start/ale/ale_linters/typescript/tsserver.vim deleted file mode 100644 index 840889f..0000000 --- a/pack/acp/start/ale/ale_linters/typescript/tsserver.vim +++ /dev/null @@ -1,17 +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#node#FindExecutable(b, 'typescript_tsserver', [ -\ 'node_modules/.bin/tsserver', -\ ])}, -\ 'command': '%e', -\ 'project_root': function('ale#handlers#tsserver#GetProjectRoot'), -\ 'language': '', -\}) diff --git a/pack/acp/start/ale/ale_linters/typescript/typecheck.vim b/pack/acp/start/ale/ale_linters/typescript/typecheck.vim deleted file mode 100644 index 2f18691..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/typescript/xo.vim b/pack/acp/start/ale/ale_linters/typescript/xo.vim deleted file mode 100644 index 0a3a717..0000000 --- a/pack/acp/start/ale/ale_linters/typescript/xo.vim +++ /dev/null @@ -1,23 +0,0 @@ -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_linters#typescript#xo#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'typescript_xo', [ - \ 'node_modules/.bin/xo', - \]) -endfunction - -function! ale_linters#typescript#xo#GetCommand(buffer) abort - return ale#Escape(ale_linters#typescript#xo#GetExecutable(a:buffer)) - \ . ale#Pad(ale#Var(a:buffer, 'typescript_xo_options')) - \ . ' --reporter json --stdin --stdin-filename %s' -endfunction - -" xo uses eslint and the output format is the same -call ale#linter#Define('typescript', { -\ 'name': 'xo', -\ 'executable': function('ale_linters#typescript#xo#GetExecutable'), -\ 'command': function('ale_linters#typescript#xo#GetCommand'), -\ 'callback': 'ale#handlers#eslint#HandleJSON', -\}) diff --git a/pack/acp/start/ale/ale_linters/verilog/iverilog.vim b/pack/acp/start/ale/ale_linters/verilog/iverilog.vim deleted file mode 100644 index e081f33..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/verilog/verilator.vim b/pack/acp/start/ale/ale_linters/verilog/verilator.vim deleted file mode 100644 index 64bb6e4..0000000 --- a/pack/acp/start/ale/ale_linters/verilog/verilator.vim +++ /dev/null @@ -1,59 +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 - let l:filename = ale#util#Tempname() . '_verilator_linted.v' - - " Create a special filename, so we can detect it in the handler. - call ale#command#ManageFile(a:buffer, l:filename) - let l:lines = getbufline(a:buffer, 1, '$') - call ale#util#Writefile(a:buffer, l:lines, l:filename) - - return 'verilator --lint-only -Wall -Wno-DECLFILENAME ' - \ . ale#Var(a:buffer, 'verilog_verilator_options') .' ' - \ . ale#Escape(l:filename) -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 (<=). - let l:pattern = '^%\(Warning\|Error\)[^:]*:\([^:]\+\):\(\d\+\): \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:line = l:match[3] + 0 - let l:type = l:match[1] is# 'Error' ? 'E' : 'W' - let l:text = l:match[4] - let l:file = l:match[2] - - if l:file =~# '_verilator_linted.v' - call add(l:output, { - \ 'lnum': l:line, - \ 'text': l:text, - \ 'type': l:type, - \}) - endif - 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/pack/acp/start/ale/ale_linters/verilog/vlog.vim b/pack/acp/start/ale/ale_linters/verilog/vlog.vim deleted file mode 100644 index 37d21c4..0000000 --- a/pack/acp/start/ale/ale_linters/verilog/vlog.vim +++ /dev/null @@ -1,36 +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[2] + 0, - \ 'type': l:match[1] is? 'Error' ? 'E' : 'W', - \ 'text': 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/pack/acp/start/ale/ale_linters/verilog/xvlog.vim b/pack/acp/start/ale/ale_linters/verilog/xvlog.vim deleted file mode 100644 index 98b5aae..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/vhdl/ghdl.vim b/pack/acp/start/ale/ale_linters/vhdl/ghdl.vim deleted file mode 100644 index b09e620..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/vhdl/vcom.vim b/pack/acp/start/ale/ale_linters/vhdl/vcom.vim deleted file mode 100644 index 1914fd3..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/vhdl/xvhdl.vim b/pack/acp/start/ale/ale_linters/vhdl/xvhdl.vim deleted file mode 100644 index 8010ff1..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/vim/ale_custom_linting_rules.vim b/pack/acp/start/ale/ale_linters/vim/ale_custom_linting_rules.vim deleted file mode 100644 index 822eb30..0000000 --- a/pack/acp/start/ale/ale_linters/vim/ale_custom_linting_rules.vim +++ /dev/null @@ -1,65 +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#GetCommand(buffer) abort - let l:dir = s:GetALEProjectDir(a:buffer) - - 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 ale#path#CdString(l:dir) . '%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'), -\ '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/pack/acp/start/ale/ale_linters/vim/vint.vim b/pack/acp/start/ale/ale_linters/vim/vint.vim deleted file mode 100644 index 65e1912..0000000 --- a/pack/acp/start/ale/ale_linters/vim/vint.vim +++ /dev/null @@ -1,60 +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}: {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' - - return '%e' - \ . ' ' . l:warning_flag - \ . (l:can_use_no_color_flag ? ' --no-color' : '') - \ . s:enable_neovim - \ . ' ' . s:format - \ . ' %t' -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/pack/acp/start/ale/ale_linters/vue/vls.vim b/pack/acp/start/ale/ale_linters/vue/vls.vim deleted file mode 100644 index ac451f3..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'vue_vls', [ -\ 'node_modules/.bin/vls', -\ ])}, -\ 'command': '%e --stdio', -\ 'language': 'vue', -\ 'project_root': function('ale_linters#vue#vls#GetProjectRoot'), -\}) diff --git a/pack/acp/start/ale/ale_linters/xhtml/alex.vim b/pack/acp/start/ale/ale_linters/xhtml/alex.vim deleted file mode 100644 index 97f3b59..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/xhtml/proselint.vim b/pack/acp/start/ale/ale_linters/xhtml/proselint.vim deleted file mode 100644 index dfad921..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/xhtml/writegood.vim b/pack/acp/start/ale/ale_linters/xhtml/writegood.vim deleted file mode 100644 index 1fcba18..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/xml/xmllint.vim b/pack/acp/start/ale/ale_linters/xml/xmllint.vim deleted file mode 100644 index 553d088..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ale_linters/yaml/swaglint.vim b/pack/acp/start/ale/ale_linters/yaml/swaglint.vim deleted file mode 100644 index 1f140e3..0000000 --- a/pack/acp/start/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#node#FindExecutable(b, 'yaml_swaglint', [ -\ 'node_modules/.bin/swaglint', -\ ])}, -\ 'command': '%e -r compact --stdin', -\ 'callback': 'ale_linters#yaml#swaglint#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/yaml/yamllint.vim b/pack/acp/start/ale/ale_linters/yaml/yamllint.vim deleted file mode 100644 index bedb7bf..0000000 --- a/pack/acp/start/ale/ale_linters/yaml/yamllint.vim +++ /dev/null @@ -1,50 +0,0 @@ -" Author: KabbAmine - -call ale#Set('yaml_yamllint_executable', 'yamllint') -call ale#Set('yaml_yamllint_options', '') - -function! ale_linters#yaml#yamllint#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'yaml_yamllint_options')) - \ . ' -f parsable %t' -endfunction - -function! ale_linters#yaml#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 - -call ale#linter#Define('yaml', { -\ 'name': 'yamllint', -\ 'executable': {b -> ale#Var(b, 'yaml_yamllint_executable')}, -\ 'command': function('ale_linters#yaml#yamllint#GetCommand'), -\ 'callback': 'ale_linters#yaml#yamllint#Handle', -\}) diff --git a/pack/acp/start/ale/ale_linters/yang/yang_lsp.vim b/pack/acp/start/ale/ale_linters/yang/yang_lsp.vim deleted file mode 100644 index 81fcaa0..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale.vim b/pack/acp/start/ale/autoload/ale.vim deleted file mode 100644 index 3a4e79c..0000000 --- a/pack/acp/start/ale/autoload/ale.vim +++ /dev/null @@ -1,261 +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_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) - -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) - - " 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') - let l:linters = !empty(l:ignore_config) || l:disable_lsp - \ ? ale#engine#ignore#Exclude(l:filetype, l:linters, l:ignore_config, l:disable_lsp) - \ : 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 = [2, 5, 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%severity%', '\=l:severity', 'g') - let l:msg = substitute(l:msg, '\V%linter%', '\=l:linter_name', 'g') - let l:msg = substitute(l:msg, '\v\%([^\%]*)code([^\%]*)\%', l:code_repl, 'g') - " Replace %s with the text. - let l:msg = substitute(l:msg, '\V%s', '\=a:item.text', 'g') - - return l:msg -endfunction diff --git a/pack/acp/start/ale/autoload/ale/ant.vim b/pack/acp/start/ale/autoload/ale/ant.vim deleted file mode 100644 index 689b444..0000000 --- a/pack/acp/start/ale/autoload/ale/ant.vim +++ /dev/null @@ -1,41 +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, build a command to print the classpath of the root -" project. Returns an empty string if cannot build the command. -function! ale#ant#BuildClasspathCommand(buffer) abort - let l:executable = ale#ant#FindExecutable(a:buffer) - let l:project_root = ale#ant#FindProjectRoot(a:buffer) - - if !empty(l:executable) && !empty(l:project_root) - return ale#path#CdString(l:project_root) - \ . ale#Escape(l:executable) - \ . ' classpath' - \ . ' -S' - \ . ' -q' - endif - - return '' -endfunction diff --git a/pack/acp/start/ale/autoload/ale/args.vim b/pack/acp/start/ale/autoload/ale/args.vim deleted file mode 100644 index 70afb2e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/assert.vim b/pack/acp/start/ale/autoload/ale/assert.vim deleted file mode 100644 index dac5efb..0000000 --- a/pack/acp/start/ale/autoload/ale/assert.vim +++ /dev/null @@ -1,331 +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 - -" 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#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) - - Assert empty(l:executable), "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#util#GetFunction(l:linter.language_callback)(l:buffer) - - 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=+ 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=+ AssertFixer :call ale#assert#Fixer() - command! -nargs=0 AssertFixerNotExecuted :call ale#assert#FixerNotExecuted() -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) - - let l:prefix = 'ale_' . a:filetype . '_' . a:name - let b:filter_expr = 'v:val[: len(l:prefix) - 1] is# l:prefix' - - Save g:ale_lsp_root - let g:ale_lsp_root = {} - - Save b:ale_lsp_root - unlet! b:ale_lsp_root - - Save g:ale_c_build_dir - unlet! g:ale_c_build_dir - - " Save and clear linter variables. - " We'll load the runtime file to reset them to defaults. - for l:key in filter(keys(g:), b:filter_expr) - execute 'Save g:' . l:key - unlet g:[l:key] - endfor - - unlet! b:ale_c_build_dir - - for l:key in filter(keys(b:), b:filter_expr) - unlet b:[l:key] - endfor - - execute 'runtime ale_linters/' . a:filetype . '/' . a:name . '.vim' - - if !exists('g:dir') - call ale#test#SetDirectory('/testplugin/test/command_callback') - 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(':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 - " 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:prefix = 'ale_' . a:filetype . '_' . a:name - let b:filter_expr = 'v:val[: len(l:prefix) - 1] is# l:prefix' - - for l:key in filter(keys(g:), b:filter_expr) - execute 'Save g:' . l:key - unlet g:[l:key] - endfor - - for l:key in filter(keys(b:), b:filter_expr) - unlet b:[l:key] - endfor - - execute 'runtime autoload/ale/fixers/' . a:name . '.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(':AssertFixer') - delcommand AssertFixer - endif - - if exists(':AssertFixerNotExecuted') - delcommand AssertFixerNotExecuted - endif -endfunction diff --git a/pack/acp/start/ale/autoload/ale/balloon.vim b/pack/acp/start/ale/autoload/ale/balloon.vim deleted file mode 100644 index 72f6b91..0000000 --- a/pack/acp/start/ale/autoload/ale/balloon.vim +++ /dev/null @@ -1,58 +0,0 @@ -" Author: w0rp -" Description: balloonexpr support for ALE. - -function! ale#balloon#MessageForPos(bufnr, lnum, col) abort - " Don't show balloons if they are disabled, or linting is disabled. - if !ale#Var(a:bufnr, 'set_balloons') - \|| !g:ale_enabled - \|| !getbufvar(a:bufnr, 'ale_enabled', 1) - return '' - endif - - 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) - - " Show the diagnostics message if found, 'Hover' output otherwise - if l:index >= 0 - return l:loclist[l:index].text - elseif 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/pack/acp/start/ale/autoload/ale/c.vim b/pack/acp/start/ale/autoload/ale/c.vim deleted file mode 100644 index 2d2083d..0000000 --- a/pack/acp/start/ale/autoload/ale/c.vim +++ /dev/null @@ -1,395 +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_parse_compile_commands', 0) -let s:sep = has('win32') ? '\' : '/' - -" Set just so tests can override it. -let g:__ale_c_project_filenames = ['.git/HEAD', 'configure', 'Makefile', 'CMakeLists.txt'] - -function! ale#c#GetBuildDirectory(buffer) abort - " Don't include build directory for header files, as compile_commands.json - " files don't consider headers to be translation units, and provide no - " commands for compiling header files. - if expand('#' . a:buffer) =~# '\v\.(h|hpp)$' - return '' - endif - - 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#AreSpecialCharsBalanced(option) abort - " Escape \" - let l:option_escaped = substitute(a:option, '\\"', '', 'g') - - " Retain special chars only - let l:special_chars = substitute(l:option_escaped, '[^"''()`]', '', 'g') - let l:special_chars = split(l:special_chars, '\zs') - - " Check if they are balanced - let l:stack = [] - - for l:char in l:special_chars - if l:char is# ')' - if len(l:stack) == 0 || get(l:stack, -1) isnot# '(' - return 0 - endif - - call remove(l:stack, -1) - elseif l:char is# '(' - call add(l:stack, l:char) - else - if len(l:stack) > 0 && get(l:stack, -1) is# l:char - call remove(l:stack, -1) - else - call add(l:stack, l:char) - endif - endif - endfor - - return len(l:stack) == 0 -endfunction - -function! ale#c#ParseCFlags(path_prefix, cflag_line) abort - let l:split_lines = split(a:cflag_line) - let l:option_index = 0 - - while l:option_index < len(l:split_lines) - let l:next_option_index = l:option_index + 1 - - " Join space-separated option - while l:next_option_index < len(l:split_lines) - \&& stridx(l:split_lines[l:next_option_index], '-') != 0 - let l:next_option_index += 1 - endwhile - - let l:option = join(l:split_lines[l:option_index : l:next_option_index-1], ' ') - call remove(l:split_lines, l:option_index, l:next_option_index-1) - call insert(l:split_lines, l:option, l:option_index) - - " Ignore invalid or conflicting options - if stridx(l:option, '-') != 0 - \|| stridx(l:option, '-o') == 0 - \|| stridx(l:option, '-c') == 0 - call remove(l:split_lines, l:option_index) - let l:option_index = l:option_index - 1 - " Fix relative path - elseif stridx(l:option, '-I') == 0 - if !(stridx(l:option, ':') == 2+1 || stridx(l:option, '/') == 2+0) - let l:option = '-I' . a:path_prefix . s:sep . l:option[2:] - call remove(l:split_lines, l:option_index) - call insert(l:split_lines, l:option, l:option_index) - endif - endif - - let l:option_index = l:option_index + 1 - endwhile - - call uniq(l:split_lines) - - return join(l:split_lines, ' ') -endfunction - -function! ale#c#ParseCFlagsFromMakeOutput(buffer, make_output) abort - if !g:ale_c_parse_makefile - 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, 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! 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:basename = tolower(fnamemodify(l:entry.file, ':t')) - let l:file_lookup[l:basename] = get(l:file_lookup, l:basename, []) + [l:entry] - - 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 - -function! ale#c#ParseCompileCommandsFlags(buffer, file_lookup, dir_lookup) abort - " Search for an exact file match first. - let l:basename = tolower(expand('#' . a:buffer . ':t')) - let l:file_list = get(a:file_lookup, l:basename, []) - " 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'] - let l:key = fnamemodify(l:basename, ':r') . l:suffix - let l:file_list = get(a:file_lookup, l:key, []) - - if !empty(l:file_list) - let l:source_file = l:key - break - endif - endfor - endif - - for l:item in l:file_list - " Load the flags for this file, or for a source file matching the - " header file. - if has_key(l:item, 'command') - \&& ( - \ bufnr(l:item.file) is a:buffer - \ || ( - \ !empty(l:source_file) - \ && l:item.file[-len(l:source_file):] is? l:source_file - \ ) - \) - return ale#c#ParseCFlags(l:item.directory, l:item.command) - endif - endfor - - " Look for any file in the same directory if we can't find an exact match. - let l:dir = ale#path#Simplify(expand('#' . a:buffer . ':p:h')) - - let l:dirbasename = tolower(expand('#' . a:buffer . ':p:h:t')) - let l:dir_list = get(a:dir_lookup, l:dirbasename, []) - - for l:item in l:dir_list - if ale#path#Simplify(fnamemodify(l:item.file, ':h')) is? l:dir - \&& has_key(l:item, 'command') - return ale#c#ParseCFlags(l:item.directory, l:item.command) - 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_makefile') && !empty(a:output) - let l:cflags = ale#c#ParseCFlagsFromMakeOutput(a:buffer, a:output) - endif - - 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 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 ale#Var(a:buffer, 'c_parse_makefile') - let l:makefile_path = ale#path#FindNearestFile(a:buffer, 'Makefile') - - if !empty(l:makefile_path) - return 'cd '. fnamemodify(l:makefile_path, ':p:h') . ' && make -n' - endif - endif - - return '' -endfunction - -function! ale#c#RunMakeCommand(buffer, Callback) abort - let 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)}, - \) -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 - -let g:ale_c_build_dir_names = get(g:, 'ale_c_build_dir_names', [ -\ 'build', -\ 'bin', -\]) diff --git a/pack/acp/start/ale/autoload/ale/command.vim b/pack/acp/start/ale/autoload/ale/command.vim deleted file mode 100644 index 1bbc4f4..0000000 --- a/pack/acp/start/ale/autoload/ale/command.vim +++ /dev/null @@ -1,379 +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 - -" 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 - -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 - -" 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) abort - let l:temporary_file = '' - let l:command = a:command - - " 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', '\=ale#Escape(l:filename)', '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, '%t', '\=ale#Escape(l:temporary_file)', '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 - - if get(l:result, 'result_callback', v:null) isnot v:null - call call(l:result.result_callback, [l:value]) - endif -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: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), - \) - 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 original command here is used in tests. - let l:result = { - \ '_deferred_job_id': l:job_id, - \ 'executable': get(l:options, 'executable', ''), - \ '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/pack/acp/start/ale/autoload/ale/completion.vim b/pack/acp/start/ale/autoload/ale/completion.vim deleted file mode 100644 index ee15605..0000000 --- a/pack/acp/start/ale/autoload/ale/completion.vim +++ /dev/null @@ -1,697 +0,0 @@ -" Author: w0rp -" Description: Completion support for LSP linters - -" 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 s:timer_id = -1 -let s:last_done_pos = [] - -" CompletionItemKind values from the LSP protocol. -let s:LSP_COMPLETION_TEXT_KIND = 1 -let s:LSP_COMPLETION_METHOD_KIND = 2 -let s:LSP_COMPLETION_FUNCTION_KIND = 3 -let s:LSP_COMPLETION_CONSTRUCTOR_KIND = 4 -let s:LSP_COMPLETION_FIELD_KIND = 5 -let s:LSP_COMPLETION_VARIABLE_KIND = 6 -let s:LSP_COMPLETION_CLASS_KIND = 7 -let s:LSP_COMPLETION_INTERFACE_KIND = 8 -let s:LSP_COMPLETION_MODULE_KIND = 9 -let s:LSP_COMPLETION_PROPERTY_KIND = 10 -let s:LSP_COMPLETION_UNIT_KIND = 11 -let s:LSP_COMPLETION_VALUE_KIND = 12 -let s:LSP_COMPLETION_ENUM_KIND = 13 -let s:LSP_COMPLETION_KEYWORD_KIND = 14 -let s:LSP_COMPLETION_SNIPPET_KIND = 15 -let s:LSP_COMPLETION_COLOR_KIND = 16 -let s:LSP_COMPLETION_FILE_KIND = 17 -let s:LSP_COMPLETION_REFERENCE_KIND = 18 - -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]*$|\.$|::$', -\} - -" 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]*$', -\} - -" A map of exact characters for triggering LSP completions. -let s:trigger_character_map = { -\ '': ['.'], -\ 'typescript': ['.', '''', '"'], -\ 'rust': ['.', '::'], -\} - -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) 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 - - " 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 - 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() abort - let l:source = get(get(b:, 'ale_completion_info', {}), 'source', '') - - if l:source is# 'ale-automatic' || l:source is# 'ale-manual' - " 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' - endif - - if l:source is# 'ale-automatic' - if !exists('b:ale_old_completeopt') - let b:ale_old_completeopt = &l:completeopt - endif - - if &l:completeopt =~# 'preview' - let &l:completeopt = 'menu,menuone,preview,noselect,noinsert' - else - let &l:completeopt = 'menu,menuone,noselect,noinsert' - endif - 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#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() - - call s:ReplaceCompletionOptions() - - return l:result isnot v:null ? l:result : [] - endif -endfunction - -function! ale#completion#Show(result) abort - if ale#util#Mode() isnot# 'i' - return - endif - - " Set the list in the buffer, temporarily replace omnifunc with our - " function, and then start omni-completion. - 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) - return - endif - - " Replace completion options shortly before opening the menu. - call s:ReplaceCompletionOptions() - - let l:source = get(get(b:, 'ale_completion_info', {}), 'source', '') - - if l:source is# 'ale-automatic' || l:source is# 'ale-manual' - call timer_start( - \ 0, - \ {-> ale#util#FeedKeys("\(ale_show_completion_menu)")} - \) - endif -endfunction - -function! s:CompletionStillValid(request_id) abort - let [l:line, l:column] = getpos('.')[1:2] - - return ale#util#Mode() is# 'i' - \&& has_key(b:, 'ale_completion_info') - \&& 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# 'deoplete' - \ || b:ale_completion_info.source is# 'ale-omnifunc' - \) -endfunction - -function! ale#completion#ParseTSServerCompletions(response) abort - let l:names = [] - - for l:suggestion in a:response.body - call add(l:names, l:suggestion.name) - endfor - - return l:names -endfunction - -function! ale#completion#ParseTSServerCompletionEntryDetails(response) abort - let l:buffer = bufnr('') - let l:results = [] - let l:names_with_details = [] - - for l:suggestion in a:response.body - let l:displayParts = [] - - for l:part in l:suggestion.displayParts - 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 - - if l:suggestion.kind is# 'className' - let l:kind = 'f' - elseif l:suggestion.kind is# 'parameterName' - let l:kind = 'f' - else - let l:kind = 'v' - endif - - " See :help complete-items - call add(l:results, { - \ 'word': l:suggestion.name, - \ 'kind': l:kind, - \ 'icase': 1, - \ 'menu': join(l:displayParts, ''), - \ 'info': join(l:documentationParts, ''), - \}) - 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) < 0', - \) - - for l:name in l:missing_names - call add(l:results, { - \ 'word': l:name, - \ 'kind': 'v', - \ 'icase': 1, - \ 'menu': '', - \ 'info': '', - \}) - 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') 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 - - " See :help complete-items for Vim completion kinds - if !has_key(l:item, 'kind') - let l:kind = 'v' - elseif l:item.kind is s:LSP_COMPLETION_METHOD_KIND - let l:kind = 'm' - elseif l:item.kind is s:LSP_COMPLETION_CONSTRUCTOR_KIND - let l:kind = 'm' - elseif l:item.kind is s:LSP_COMPLETION_FUNCTION_KIND - let l:kind = 'f' - elseif l:item.kind is s:LSP_COMPLETION_CLASS_KIND - let l:kind = 'f' - elseif l:item.kind is s:LSP_COMPLETION_INTERFACE_KIND - let l:kind = 'f' - else - let l:kind = 'v' - 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 - - call add(l:results, { - \ 'word': l:word, - \ 'kind': l:kind, - \ 'icase': 1, - \ 'menu': get(l:item, 'detail', ''), - \ 'info': (type(l:doc) is v:t_string ? l:doc : ''), - \}) - endfor - - if has_key(l:info, 'prefix') - let l:results = ale#completion#Filter(l:buffer, &filetype, l:results, l:info.prefix) - 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, - \)[: 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) - 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:names, - \ ), - \) - 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' - 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, - \) - 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(source) abort - let [l:line, l:column] = getpos('.')[1:2] - - let l:prefix = ale#completion#GetPrefix(&filetype, l:line, l:column) - - if a: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': a:source, - \} - unlet! b:ale_completion_result - - 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! 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#Done() abort - silent! pclose - - call ale#completion#RestoreCompletionOptions() - - let s:last_done_pos = getpos('.')[1:2] -endfunction - -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/pack/acp/start/ale/autoload/ale/completion/python.vim b/pack/acp/start/ale/autoload/ale/completion/python.vim deleted file mode 100644 index 6b65c5b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/cursor.vim b/pack/acp/start/ale/autoload/ale/cursor.vim deleted file mode 100644 index 8c331c5..0000000 --- a/pack/acp/start/ale/autoload/ale/cursor.vim +++ /dev/null @@ -1,167 +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 -let s:last_pos = [0, 0, 0] - -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') - - " 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 - exec "norm! :echomsg l:message\n" - 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' - 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. - execute '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] - - " 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 != s:last_pos - let l:delay = ale#Var(l:buffer, 'echo_delay') - - let s: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") - call ale#preview#Show(l:lines, {'stay_here': l:stay_here}) - - " Clear the echo message if we manually displayed details. - if !l:stay_here - execute 'echo' - 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/pack/acp/start/ale/autoload/ale/d.vim b/pack/acp/start/ale/autoload/ale/d.vim deleted file mode 100644 index 0e23220..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/debugging.vim b/pack/acp/start/ale/autoload/ale/debugging.vim deleted file mode 100644 index 7cdbaba..0000000 --- a/pack/acp/start/ale/autoload/ale/debugging.vim +++ /dev/null @@ -1,264 +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_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_list_vertical', -\ 'ale_list_window_size', -\ 'ale_loclist_msg_format', -\ 'ale_lsp_root', -\ 'ale_max_buffer_history_size', -\ 'ale_max_signs', -\ 'ale_maximum_file_size', -\ 'ale_open_list', -\ 'ale_pattern_options', -\ 'ale_pattern_options_enabled', -\ '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_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 - execute 'echo a:message' -endfunction - -function! s:GetLinterVariables(filetype, 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:linter_names, l:match[2]) >= 0 - 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: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'']') - - " Load linter variables to display - " This must be done after linters are loaded. - let l:variable_list = s:GetLinterVariables(l:filetype, l:enabled_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'), '') - - 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(' 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 - - redir => l:output - silent call ale#debugging#Info() - redir END - - 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) - - redir => l:output - silent call ale#debugging#Info() - redir END - - call writefile(split(l:output, "\n"), l:expanded_filename) - call s:Echo('ALEInfo written to ' . l:expanded_filename) -endfunction diff --git a/pack/acp/start/ale/autoload/ale/definition.vim b/pack/acp/start/ale/autoload/ale/definition.vim deleted file mode 100644 index 3915cac..0000000 --- a/pack/acp/start/ale/autoload/ale/definition.vim +++ /dev/null @@ -1,156 +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) - -" 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 get(a:response, 'command', '') is# 'definition' - \&& 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 - let l:filename = ale#path#FromURI(l:item.uri) - let l:line = l:item.range.start.line + 1 - let l:column = l:item.range.start.character + 1 - - call ale#definition#UpdateTagStack() - call ale#util#Open(l:filename, l:line, l:column, l:options) - 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' - let l:message = ale#lsp#tsserver_message#Definition( - \ l:buffer, - \ a:line, - \ a:column - \) - 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) - 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) - " TODO: handle typeDefinition for tsserver if supported by the - " protocol - if l:linter.lsp is# 'tsserver' - continue - endif - - call s:GoToLSPDefinition(l:linter, a:options, 'typeDefinition') - endif - endfor -endfunction diff --git a/pack/acp/start/ale/autoload/ale/engine.vim b/pack/acp/start/ale/autoload/ale/engine.vim deleted file mode 100644 index 491d3c2..0000000 --- a/pack/acp/start/ale/autoload/ale/engine.vim +++ /dev/null @@ -1,733 +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', {}) - -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 - -" Register a temporary file to be managed with the ALE engine for -" a current job run. -function! ale#engine#ManageFile(buffer, filename) abort - if !get(g:, 'ale_ignore_2_4_warnings') - execute 'echom ''ale#engine#ManageFile is deprecated. Use `let g:ale_ignore_2_4_warnings = 1` to disable this message.''' - endif - - call ale#command#ManageFile(a:buffer, a:filename) -endfunction - -" Same as the above, but manage an entire directory. -function! ale#engine#ManageDirectory(buffer, directory) abort - if !get(g:, 'ale_ignore_2_4_warnings') - execute 'echom ''ale#engine#ManageDirectory is deprecated. Use `let g:ale_ignore_2_4_warnings = 1` to disable this message.''' - endif - - call ale#command#ManageDirectory(a:buffer, a:directory) -endfunction - -function! ale#engine#CreateFile(buffer) abort - if !get(g:, 'ale_ignore_2_4_warnings') - execute 'echom ''ale#engine#CreateFile is deprecated. Use `let g:ale_ignore_2_4_warnings = 1` to disable this message.''' - endif - - return ale#command#CreateFile(a:buffer) -endfunction - -" Create a new temporary directory and manage it in one go. -function! ale#engine#CreateDirectory(buffer) abort - if !get(g:, 'ale_ignore_2_4_warnings') - execute 'echom ''ale#engine#CreateDirectory is deprecated. Use `let g:ale_ignore_2_4_warnings = 1` to disable this message.''' - endif - - return ale#command#CreateDirectory(a:buffer) -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 - let l:next_chain_index = a:job_info.next_chain_index - - " 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 - - if l:next_chain_index < len(get(l:linter, 'command_chain', [])) - let [l:command, l:options] = ale#engine#ProcessChain( - \ a:buffer, - \ l:executable, - \ l:linter, - \ l:next_chain_index, - \ a:output, - \) - - call s:RunJob(l:command, l:options) - - return - 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 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 - " 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: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 - - if has_key(l:old_item, 'filename') - \&& !ale#path#IsTempName(l:old_item.filename) - " 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_item.filename - 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) - 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: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:next_chain_index = a:options.next_chain_index - let l:read_buffer = a:options.read_buffer - let l:info = g:ale_buffer_info[l:buffer] - - let l:Callback = function('s:HandleExit', [{ - \ 'linter': l:linter, - \ 'executable': l:executable, - \ 'next_chain_index': l:next_chain_index, - \}]) - let l:result = ale#command#Run(l:buffer, l:command, l:Callback, { - \ 'output_stream': l:output_stream, - \ 'executable': l:executable, - \ 'read_buffer': l:read_buffer, - \ 'log_output': l:next_chain_index >= len(get(l:linter, 'command_chain', [])), - \}) - - " 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 - -" Determine which commands to run for a link in a command chain, or -" just a regular command. -function! ale#engine#ProcessChain(buffer, executable, linter, chain_index, input) abort - let l:output_stream = get(a:linter, 'output_stream', 'stdout') - let l:read_buffer = a:linter.read_buffer - let l:chain_index = a:chain_index - let l:input = a:input - - while l:chain_index < len(a:linter.command_chain) - " Run a chain of commands, one asynchronous command after the other, - " so that many programs can be run in a sequence. - let l:chain_item = a:linter.command_chain[l:chain_index] - - if l:chain_index == 0 - " The first callback in the chain takes only a buffer number. - let l:command = ale#util#GetFunction(l:chain_item.callback)( - \ a:buffer - \) - else - " The second callback in the chain takes some input too. - let l:command = ale#util#GetFunction(l:chain_item.callback)( - \ a:buffer, - \ l:input - \) - endif - - " If we have a command to run, execute that. - if !empty(l:command) - " The chain item can override the output_stream option. - if has_key(l:chain_item, 'output_stream') - let l:output_stream = l:chain_item.output_stream - endif - - " The chain item can override the read_buffer option. - if has_key(l:chain_item, 'read_buffer') - let l:read_buffer = l:chain_item.read_buffer - elseif l:chain_index != len(a:linter.command_chain) - 1 - " Don't read the buffer for commands besides the last one - " in the chain by default. - let l:read_buffer = 0 - endif - - break - endif - - " Command chain items can return an empty string to indicate that - " a command should be skipped, so we should try the next item - " with no input. - let l:input = [] - let l:chain_index += 1 - endwhile - - return [l:command, { - \ 'executable': a:executable, - \ 'buffer': a:buffer, - \ 'linter': a:linter, - \ 'output_stream': l:output_stream, - \ 'next_chain_index': l:chain_index + 1, - \ 'read_buffer': l:read_buffer, - \}] -endfunction - -function! s:StopCurrentJobs(buffer, clear_lint_file_jobs) 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 - " Keep jobs for linting files when we're only linting buffers. - call filter(l:info.active_linter_list, 'get(v:val, ''lint_file'')') - endif -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, executable) abort - if ale#command#IsDeferred(a:executable) - let a:executable.result_callback = { - \ executable -> s:RunIfExecutable(a:buffer, a:linter, 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:linter.lint_file ? 'file_linter' : 'linter' - call setbufvar(a:buffer, 'ale_job_type', l:job_type) - - if has_key(a:linter, 'command_chain') - let [l:command, l:options] = ale#engine#ProcessChain( - \ a:buffer, - \ a:executable, - \ a:linter, - \ 0, - \ [] - \) - - return s:RunJob(l:command, l:options) - endif - - let l:command = ale#linter#GetCommand(a:buffer, a:linter) - let l:options = { - \ 'executable': a:executable, - \ 'buffer': a:buffer, - \ 'linter': a:linter, - \ 'output_stream': get(a:linter, 'output_stream', 'stdout'), - \ 'next_chain_index': 1, - \ 'read_buffer': a:linter.read_buffer, - \} - - 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) 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, l:executable) - endif - - return 0 -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:StopCurrentJobs(a:buffer, a:should_lint_file) - 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:linter in a:linters - " Only run lint_file linters if we should. - if !l:linter.lint_file || a:should_lint_file - if s:RunLinter(a:buffer, l:linter) - " 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 l:new_buffer - call s:AddProblemsFromOtherBuffers(a:buffer, a:linters) - endif -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/pack/acp/start/ale/autoload/ale/engine/ignore.vim b/pack/acp/start/ale/autoload/ale/engine/ignore.vim deleted file mode 100644 index 8057465..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/events.vim b/pack/acp/start/ale/autoload/ale/events.vim deleted file mode 100644 index da554ef..0000000 --- a/pack/acp/start/ale/autoload/ale/events.vim +++ /dev/null @@ -1,155 +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(g:ale_lint_delay) - elseif l:text_changed is? 'normal' - autocmd TextChanged * call ale#Queue(g:ale_lint_delay) - elseif l:text_changed is? 'insert' - autocmd TextChangedI * call ale#Queue(g:ale_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 - 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_close_preview_on_insert - autocmd InsertEnter * if exists('*ale#preview#CloseIfTypeMatches') | call ale#preview#CloseIfTypeMatches('ale-preview') | endif - endif - endif - augroup END -endfunction diff --git a/pack/acp/start/ale/autoload/ale/filetypes.vim b/pack/acp/start/ale/autoload/ale/filetypes.vim deleted file mode 100644 index 6cdc9ec..0000000 --- a/pack/acp/start/ale/autoload/ale/filetypes.vim +++ /dev/null @@ -1,60 +0,0 @@ -" Author: w0rp -" Description: This file handles guessing file extensions for filetypes, etc. - -function! ale#filetypes#LoadExtensionMap() abort - " Output includes: - " '*.erl setf erlang' - redir => l:output - silent exec 'autocmd' - redir end - - 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/pack/acp/start/ale/autoload/ale/fix.vim b/pack/acp/start/ale/autoload/ale/fix.vim deleted file mode 100644 index 9987fbd..0000000 --- a/pack/acp/start/ale/autoload/ale/fix.vim +++ /dev/null @@ -1,416 +0,0 @@ -call ale#Set('fix_on_save_ignore', {}) - -" 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}) - let l:has_bufline_api = exists('*deletebufline') && exists('*setbufline') - - if !l:data.done || (!l:has_bufline_api && a:buffer isnot bufnr('')) - return - endif - - call remove(g:ale_fix_buffer_data, a:buffer) - - if l:data.changes_made - " 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(l:data.output), 'substitute(v:val, ''\r\+$'', '''', '''')') - \ : l:data.output - 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 = len(l:data.lines_before) - - 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 - - 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 - - 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 - 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) - execute 'echoerr ''The file was changed before fixing finished''' - - 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:ChainCallback = get(a:job_info, 'chain_with', v:null) - 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 l:ChainCallback is v:null && !empty(split(join(l:output))) - let l:input = l:output - else - let l:input = a:job_info.input - endif - - if l:ChainCallback isnot v:null && !get(g:, 'ale_ignore_2_4_warnings') - execute 'echom ''chain_with is deprecated. Use `let g:ale_ignore_2_4_warnings = 1` to disable this message.''' - endif - - let l:next_index = l:ChainCallback is v:null - \ ? a:job_info.callback_index + 1 - \ : a:job_info.callback_index - - call s:RunFixer({ - \ 'buffer': a:buffer, - \ 'input': l:input, - \ 'output': l:output, - \ 'callback_list': a:job_info.callback_list, - \ 'callback_index': l:next_index, - \ 'chain_callback': l:ChainCallback, - \}) -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 - - 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', '') - let l:ChainWith = get(a:result, 'chain_with', v:null) - - if empty(l:command) - " If the command is empty, skip to the next item, or call the - " chain_with function. - call s:RunFixer({ - \ 'buffer': l:buffer, - \ 'input': l:input, - \ 'callback_index': a:options.callback_index + (l:ChainWith is v:null), - \ 'callback_list': a:options.callback_list, - \ 'chain_callback': l:ChainWith, - \ 'output': [], - \}) - - return - endif - - let l:read_temporary_file = get(a:result, 'read_temporary_file', 0) - " Default to piping the buffer for the last fixer in the chain. - let l:read_buffer = get(a:result, 'read_buffer', l:ChainWith is v:null) - let l:output_stream = get(a:result, 'output_stream', 'stdout') - - if l:read_temporary_file - let l:output_stream = 'none' - endif - - let l:Callback = function('s:HandleExit', [{ - \ 'input': l:input, - \ 'chain_with': l:ChainWith, - \ '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, - \}) - - 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:ChainCallback = get(a:options, 'chain_callback', v:null) - - let l:Function = l:ChainCallback isnot v:null - \ ? ale#util#GetFunction(l:ChainCallback) - \ : a:options.callback_list[l:index] - - " Record new jobs started as fixer jobs. - call setbufvar(l:buffer, 'ale_job_type', 'fixer') - - if l:ChainCallback isnot v:null - " Chained commands accept (buffer, output, [input]) - let l:result = ale#util#FunctionArgCount(l:Function) == 2 - \ ? call(l:Function, [l:buffer, a:options.output]) - \ : call(l:Function, [l:buffer, a:options.output, copy(l:input)]) - else - " 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)]) - endif - - call s:RunJob(l:result, { - \ 'buffer': l:buffer, - \ 'input': l:input, - \ 'callback_list': a:options.callback_list, - \ 'callback_index': l:index, - \}) -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 - if type(l:Item) is v:t_string - let l:Func = ale#fix#registry#GetFunc(l:Item) - - if !empty(l:Func) - let l:Item = l:Func - endif - endif - - try - call add(l:corrected_list, 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', - \ '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# 'save_file' - throw "fixing_flag must be either '' or 'save_file'" - endif - - try - let l:callback_list = s:GetCallbacks(a:buffer, a:fixing_flag, a:000) - catch /E700\|BADNAME/ - 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, - \) - execute 'echom l:echo_message' - - return 0 - endtry - - if empty(l:callback_list) - if a:fixing_flag is# '' - execute '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(''))) diff --git a/pack/acp/start/ale/autoload/ale/fix/registry.vim b/pack/acp/start/ale/autoload/ale/fix/registry.vim deleted file mode 100644 index 1a8d02e..0000000 --- a/pack/acp/start/ale/autoload/ale/fix/registry.vim +++ /dev/null @@ -1,524 +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', -\ }, -\ '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.', -\ }, -\ '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'], -\ }, -\ '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', 'html', 'yaml'], -\ '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'], -\ }, -\ '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.', -\ }, -\ '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': ['scala'], -\ 'description': 'Fix Scala files using scalafmt', -\ }, -\ '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', -\ }, -\ '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.', -\ }, -\ '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.', -\ }, -\ '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.', -\ }, -\ 'gofmt': { -\ 'function': 'ale#fixers#gofmt#Fix', -\ 'suggested_filetypes': ['go'], -\ 'description': 'Fix Go files with go fmt.', -\ }, -\ 'goimports': { -\ 'function': 'ale#fixers#goimports#Fix', -\ 'suggested_filetypes': ['go'], -\ 'description': 'Fix Go files imports with goimports.', -\ }, -\ '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.', -\ }, -\ '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.', -\ }, -\ 'ocamlformat': { -\ 'function': 'ale#fixers#ocamlformat#Fix', -\ 'suggested_filetypes': ['ocaml'], -\ 'description': 'Fix OCaml files with ocamlformat.', -\ }, -\ 'ocp-indent': { -\ 'function': 'ale#fixers#ocp_indent#Fix', -\ 'suggested_filetypes': ['ocaml'], -\ 'description': 'Fix OCaml files with ocp-indent.', -\ }, -\ 'refmt': { -\ 'function': 'ale#fixers#refmt#Fix', -\ 'suggested_filetypes': ['reason'], -\ 'description': 'Fix ReasonML files with refmt.', -\ }, -\ '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.', -\ }, -\ '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.', -\ }, -\ '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.', -\ }, -\ '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.', -\ }, -\ 'ktlint': { -\ 'function': 'ale#fixers#ktlint#Fix', -\ 'suggested_filetypes': ['kt'], -\ 'description': 'Fix Kotlin files with ktlint.', -\ }, -\ 'styler': { -\ 'function': 'ale#fixers#styler#Fix', -\ 'suggested_filetypes': ['r', 'rmarkdown'], -\ '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.', -\ }, -\} - -" 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/pack/acp/start/ale/autoload/ale/fixers/autopep8.vim b/pack/acp/start/ale/autoload/ale/fixers/autopep8.vim deleted file mode 100644 index 5798d82..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/bibclean.vim b/pack/acp/start/ale/autoload/ale/fixers/bibclean.vim deleted file mode 100644 index 89cb97a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/black.vim b/pack/acp/start/ale/autoload/ale/fixers/black.vim deleted file mode 100644 index 367b8d5..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/black.vim +++ /dev/null @@ -1,37 +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_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 - - return ale#python#FindExecutable(a:buffer, 'python_black', ['black']) -endfunction - -function! ale#fixers#black#Fix(buffer) abort - let l:cd_string = ale#Var(a:buffer, 'python_black_change_directory') - \ ? ale#path#BufferCdString(a:buffer) - \ : '' - - let l:executable = ale#fixers#black#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv$' - \ ? ' run black' - \ : '' - - let l:options = ale#Var(a:buffer, 'python_black_options') - - return { - \ 'command': l:cd_string . ale#Escape(l:executable) . l:exec_args - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' -', - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/brittany.vim b/pack/acp/start/ale/autoload/ale/fixers/brittany.vim deleted file mode 100644 index c244834..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/clangformat.vim b/pack/acp/start/ale/autoload/ale/fixers/clangformat.vim deleted file mode 100644 index eae1a7b..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/clangformat.vim +++ /dev/null @@ -1,22 +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', '') - -function! ale#fixers#clangformat#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'c_clangformat', [ - \ 'clang-format', - \]) -endfunction - -function! ale#fixers#clangformat#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'c_clangformat_options') - - return { - \ 'command': ale#Escape(ale#fixers#clangformat#GetExecutable(a:buffer)) - \ . ' ' . l:options, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/cmakeformat.vim b/pack/acp/start/ale/autoload/ale/fixers/cmakeformat.vim deleted file mode 100644 index f40ed6e..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/cmakeformat.vim +++ /dev/null @@ -1,18 +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) - \ . ' -i ' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/dartfmt.vim b/pack/acp/start/ale/autoload/ale/fixers/dartfmt.vim deleted file mode 100644 index 0687d6d..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/elm_format.vim b/pack/acp/start/ale/autoload/ale/fixers/elm_format.vim deleted file mode 100644 index cd2be2c..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/autoload/ale/fixers/eslint.vim b/pack/acp/start/ale/autoload/ale/fixers/eslint.vim deleted file mode 100644 index 62e692b..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/eslint.vim +++ /dev/null @@ -1,80 +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 { - \ '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 { - \ '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 { - \ '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/pack/acp/start/ale/autoload/ale/fixers/fecs.vim b/pack/acp/start/ale/autoload/ale/fixers/fecs.vim deleted file mode 100644 index d692bc9..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/fixjson.vim b/pack/acp/start/ale/autoload/ale/fixers/fixjson.vim deleted file mode 100644 index 33ce0af..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/autoload/ale/fixers/floskell.vim b/pack/acp/start/ale/autoload/ale/fixers/floskell.vim deleted file mode 100644 index f0015db..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/generic.vim b/pack/acp/start/ale/autoload/ale/fixers/generic.vim deleted file mode 100644 index cb8865b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/generic_python.vim b/pack/acp/start/ale/autoload/ale/fixers/generic_python.vim deleted file mode 100644 index d55a23c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/gofmt.vim b/pack/acp/start/ale/autoload/ale/fixers/gofmt.vim deleted file mode 100644 index 66b67a9..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/gofmt.vim +++ /dev/null @@ -1,18 +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') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -l -w' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/goimports.vim b/pack/acp/start/ale/autoload/ale/fixers/goimports.vim deleted file mode 100644 index 783d020..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/goimports.vim +++ /dev/null @@ -1,22 +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') - - if !executable(l:executable) - return 0 - endif - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -l -w -srcdir %s' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/gomod.vim b/pack/acp/start/ale/autoload/ale/fixers/gomod.vim deleted file mode 100644 index 68895f9..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/gomod.vim +++ /dev/null @@ -1,10 +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') - - return { - \ 'command': ale#Escape(l:executable) . ' mod edit -fmt %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/google_java_format.vim b/pack/acp/start/ale/autoload/ale/fixers/google_java_format.vim deleted file mode 100644 index 20086c7..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/hackfmt.vim b/pack/acp/start/ale/autoload/ale/fixers/hackfmt.vim deleted file mode 100644 index bf2d4f7..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/help.vim b/pack/acp/start/ale/autoload/ale/fixers/help.vim deleted file mode 100644 index b20740f..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/hfmt.vim b/pack/acp/start/ale/autoload/ale/fixers/hfmt.vim deleted file mode 100644 index 0407b71..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/hlint.vim b/pack/acp/start/ale/autoload/ale/fixers/hlint.vim deleted file mode 100644 index 88779a5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/importjs.vim b/pack/acp/start/ale/autoload/ale/fixers/importjs.vim deleted file mode 100644 index b5487b2..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/isort.vim b/pack/acp/start/ale/autoload/ale/fixers/isort.vim deleted file mode 100644 index 9070fb2..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/isort.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: w0rp -" Description: Fixing Python imports with isort. - -call ale#Set('python_isort_executable', 'isort') -call ale#Set('python_isort_options', '') -call ale#Set('python_isort_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale#fixers#isort#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'python_isort_options') - - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'python_isort', - \ ['isort'], - \) - - if !executable(l:executable) - return 0 - endif - - return { - \ 'command': ale#path#BufferCdString(a:buffer) - \ . ale#Escape(l:executable) . (!empty(l:options) ? ' ' . l:options : '') . ' -', - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/jq.vim b/pack/acp/start/ale/autoload/ale/fixers/jq.vim deleted file mode 100644 index cd9b913..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/ktlint.vim b/pack/acp/start/ale/autoload/ale/fixers/ktlint.vim deleted file mode 100644 index cb975d6..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/ktlint.vim +++ /dev/null @@ -1,9 +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', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/latexindent.vim b/pack/acp/start/ale/autoload/ale/fixers/latexindent.vim deleted file mode 100644 index b0a0884..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/latexindent.vim +++ /dev/null @@ -1,18 +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 -w' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/mix_format.vim b/pack/acp/start/ale/autoload/ale/fixers/mix_format.vim deleted file mode 100644 index 7a09170..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/ocamlformat.vim b/pack/acp/start/ale/autoload/ale/fixers/ocamlformat.vim deleted file mode 100644 index 9b7c3e1..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/ocamlformat.vim +++ /dev/null @@ -1,18 +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:filename = expand('#' . a:buffer . ':p') - 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=' . ale#Escape(l:filename) - \ . ' -' - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/ocp_indent.vim b/pack/acp/start/ale/autoload/ale/fixers/ocp_indent.vim deleted file mode 100644 index e1b047b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/perltidy.vim b/pack/acp/start/ale/autoload/ale/fixers/perltidy.vim deleted file mode 100644 index a55a572..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/pgformatter.vim b/pack/acp/start/ale/autoload/ale/fixers/pgformatter.vim deleted file mode 100644 index 9ea08ec..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/php_cs_fixer.vim b/pack/acp/start/ale/autoload/ale/fixers/php_cs_fixer.vim deleted file mode 100644 index 5c59e26..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/autoload/ale/fixers/phpcbf.vim b/pack/acp/start/ale/autoload/ale/fixers/phpcbf.vim deleted file mode 100644 index f14b840..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/phpcbf.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: notomo -" Description: Fixing files with phpcbf. - -call ale#Set('php_phpcbf_standard', '') -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#node#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 . ' -' - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/prettier.vim b/pack/acp/start/ale/autoload/ale/fixers/prettier.vim deleted file mode 100644 index b7f0ecd..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/prettier.vim +++ /dev/null @@ -1,108 +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#node#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#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 = '' - - " 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')) && 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', - \ 'yaml': 'yaml', - \ 'html': 'html', - \} - - for l:filetype in split(getbufvar(a:buffer, '&filetype'), '\.') - 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 { - \ 'command': ale#path#BufferCdString(a:buffer) - \ . 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 { - \ 'command': ale#path#BufferCdString(a:buffer) - \ . 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/pack/acp/start/ale/autoload/ale/fixers/prettier_eslint.vim b/pack/acp/start/ale/autoload/ale/fixers/prettier_eslint.vim deleted file mode 100644 index 1e66f49..0000000 --- a/pack/acp/start/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#node#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 { - \ 'command': ale#path#BufferCdString(a:buffer) - \ . 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/pack/acp/start/ale/autoload/ale/fixers/prettier_standard.vim b/pack/acp/start/ale/autoload/ale/fixers/prettier_standard.vim deleted file mode 100644 index b6e0a6f..0000000 --- a/pack/acp/start/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#node#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)) - \ . ' %t' - \ . ' ' . l:options, - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/puppetlint.vim b/pack/acp/start/ale/autoload/ale/fixers/puppetlint.vim deleted file mode 100644 index bf36e48..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/qmlfmt.vim b/pack/acp/start/ale/autoload/ale/fixers/qmlfmt.vim deleted file mode 100644 index 90b2567..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/refmt.vim b/pack/acp/start/ale/autoload/ale/fixers/refmt.vim deleted file mode 100644 index 514f950..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/reorder_python_imports.vim b/pack/acp/start/ale/autoload/ale/fixers/reorder_python_imports.vim deleted file mode 100644 index 42a0a6e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/rubocop.vim b/pack/acp/start/ale/autoload/ale/fixers/rubocop.vim deleted file mode 100644 index 33ba688..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/rubocop.vim +++ /dev/null @@ -1,20 +0,0 @@ -call ale#Set('ruby_rubocop_options', '') -call ale#Set('ruby_rubocop_executable', 'rubocop') - -function! ale#fixers#rubocop#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'ruby_rubocop_executable') - let l:config = ale#path#FindNearestFile(a:buffer, '.rubocop.yml') - let l:options = ale#Var(a:buffer, 'ruby_rubocop_options') - - return ale#handlers#ruby#EscapeExecutable(l:executable, 'rubocop') - \ . (!empty(l:config) ? ' --config ' . ale#Escape(l:config) : '') - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --auto-correct --force-exclusion %t' -endfunction - -function! ale#fixers#rubocop#Fix(buffer) abort - return { - \ 'command': ale#fixers#rubocop#GetCommand(a:buffer), - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/rufo.vim b/pack/acp/start/ale/autoload/ale/fixers/rufo.vim deleted file mode 100644 index 01d537a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/rustfmt.vim b/pack/acp/start/ale/autoload/ale/fixers/rustfmt.vim deleted file mode 100644 index 38882fb..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/scalafmt.vim b/pack/acp/start/ale/autoload/ale/fixers/scalafmt.vim deleted file mode 100644 index dd0e774..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/shfmt.vim b/pack/acp/start/ale/autoload/ale/fixers/shfmt.vim deleted file mode 100644 index 06e8da5..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/shfmt.vim +++ /dev/null @@ -1,31 +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! s:DefaultOption(buffer) abort - if getbufvar(a:buffer, '&expandtab') == 0 - " Tab is used by default - return '' - endif - - let l:tabsize = getbufvar(a:buffer, '&shiftwidth') - - if l:tabsize == 0 - let l:tabsize = getbufvar(a:buffer, '&tabstop') - endif - - return ' -i ' . l:tabsize -endfunction - -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) - \ . (empty(l:options) ? s:DefaultOption(a:buffer) : ' ' . l:options) - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/sqlfmt.vim b/pack/acp/start/ale/autoload/ale/fixers/sqlfmt.vim deleted file mode 100644 index c88a8ec..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/standard.vim b/pack/acp/start/ale/autoload/ale/fixers/standard.vim deleted file mode 100644 index 77712d4..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/standard.vim +++ /dev/null @@ -1,25 +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#node#FindExecutable(a:buffer, 'javascript_standard', [ - \ '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:options = ale#Var(a:buffer, 'javascript_standard_options') - - return { - \ 'command': ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --fix %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/standardrb.vim b/pack/acp/start/ale/autoload/ale/fixers/standardrb.vim deleted file mode 100644 index fab1e2b..0000000 --- a/pack/acp/start/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#handlers#ruby#EscapeExecutable(l:executable, 'standardrb') - \ . (!empty(l:config) ? ' --config ' . ale#Escape(l:config) : '') - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --fix --force-exclusion %t' -endfunction - -function! ale#fixers#standardrb#Fix(buffer) abort - return { - \ 'command': ale#fixers#standardrb#GetCommand(a:buffer), - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/stylelint.vim b/pack/acp/start/ale/autoload/ale/fixers/stylelint.vim deleted file mode 100644 index 6bfb2fd..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/stylelint.vim +++ /dev/null @@ -1,22 +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)) - -function! ale#fixers#stylelint#GetExecutable(buffer) abort - return ale#node#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) - - return { - \ 'command': ale#node#Executable(a:buffer, l:executable) - \ . ' --fix %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/styler.vim b/pack/acp/start/ale/autoload/ale/fixers/styler.vim deleted file mode 100644 index 7ff3275..0000000 --- a/pack/acp/start/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), style = ' - \ . ale#Var(a:buffer, 'r_styler_options') . ')"' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/stylish_haskell.vim b/pack/acp/start/ale/autoload/ale/fixers/stylish_haskell.vim deleted file mode 100644 index ce71c1c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/swiftformat.vim b/pack/acp/start/ale/autoload/ale/fixers/swiftformat.vim deleted file mode 100644 index 304182b..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/autoload/ale/fixers/terraform.vim b/pack/acp/start/ale/autoload/ale/fixers/terraform.vim deleted file mode 100644 index bc05380..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/textlint.vim b/pack/acp/start/ale/autoload/ale/fixers/textlint.vim deleted file mode 100644 index 38ab2bf..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/tidy.vim b/pack/acp/start/ale/autoload/ale/fixers/tidy.vim deleted file mode 100644 index 1af4120..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/autoload/ale/fixers/tslint.vim b/pack/acp/start/ale/autoload/ale/fixers/tslint.vim deleted file mode 100644 index b352af3..0000000 --- a/pack/acp/start/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 - \ . ' --fix %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/uncrustify.vim b/pack/acp/start/ale/autoload/ale/fixers/uncrustify.vim deleted file mode 100644 index ffec18e..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/uncrustify.vim +++ /dev/null @@ -1,16 +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', '') - -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' - \ . (empty(l:options) ? '' : ' ' . l:options) - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/xmllint.vim b/pack/acp/start/ale/autoload/ale/fixers/xmllint.vim deleted file mode 100644 index b14ffd3..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/fixers/xo.vim b/pack/acp/start/ale/autoload/ale/fixers/xo.vim deleted file mode 100644 index 882350b..0000000 --- a/pack/acp/start/ale/autoload/ale/fixers/xo.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: Albert Marquez - https://github.com/a-marquez -" Description: Fixing files with XO. - -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', '') - -function! ale#fixers#xo#GetExecutable(buffer) abort - return ale#node#FindExecutable(a:buffer, 'javascript_xo', [ - \ 'node_modules/xo/cli.js', - \ 'node_modules/.bin/xo', - \]) -endfunction - -function! ale#fixers#xo#Fix(buffer) abort - let l:executable = ale#fixers#xo#GetExecutable(a:buffer) - - return { - \ 'command': ale#node#Executable(a:buffer, l:executable) - \ . ' --fix %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/pack/acp/start/ale/autoload/ale/fixers/yapf.vim b/pack/acp/start/ale/autoload/ale/fixers/yapf.vim deleted file mode 100644 index f04bb1f..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/go.vim b/pack/acp/start/ale/autoload/ale/go.vim deleted file mode 100644 index cd7d950..0000000 --- a/pack/acp/start/ale/autoload/ale/go.vim +++ /dev/null @@ -1,27 +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 diff --git a/pack/acp/start/ale/autoload/ale/gradle.vim b/pack/acp/start/ale/autoload/ale/gradle.vim deleted file mode 100644 index dc377fb..0000000 --- a/pack/acp/start/ale/autoload/ale/gradle.vim +++ /dev/null @@ -1,67 +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, build a command to print the classpath of the root -" project. Returns an empty string if cannot build the command. -function! ale#gradle#BuildClasspathCommand(buffer) abort - let l:executable = ale#gradle#FindExecutable(a:buffer) - let l:project_root = ale#gradle#FindProjectRoot(a:buffer) - - if !empty(l:executable) && !empty(l:project_root) - return ale#path#CdString(l:project_root) - \ . ale#Escape(l:executable) - \ . ' -I ' . ale#Escape(s:init_path) - \ . ' -q printClasspath' - endif - - return '' -endfunction diff --git a/pack/acp/start/ale/autoload/ale/gradle/init.gradle b/pack/acp/start/ale/autoload/ale/gradle/init.gradle deleted file mode 100644 index fb1db9e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/alex.vim b/pack/acp/start/ale/autoload/ale/handlers/alex.vim deleted file mode 100644 index 190a7f8..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/alex.vim +++ /dev/null @@ -1,54 +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#node#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)) - \ . ' %s ' - \ . 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 -" --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', - \ 'lint_file': 1, - \}) -endfunction diff --git a/pack/acp/start/ale/autoload/ale/handlers/ccls.vim b/pack/acp/start/ale/autoload/ale/handlers/ccls.vim deleted file mode 100644 index 1e2aa31..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/ccls.vim +++ /dev/null @@ -1,19 +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 diff --git a/pack/acp/start/ale/autoload/ale/handlers/cppcheck.vim b/pack/acp/start/ale/autoload/ale/handlers/cppcheck.vim deleted file mode 100644 index 6d8fa15..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/cppcheck.vim +++ /dev/null @@ -1,62 +0,0 @@ -" Description: Handle errors for cppcheck. - -function! ale#handlers#cppcheck#GetCdCommand(buffer) abort - let [l:dir, l:json_path] = ale#c#FindCompileCommands(a:buffer) - let l:cd_command = !empty(l:dir) ? ale#path#CdString(l:dir) : '' - - return l:cd_command -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 - " 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) - - return !empty(l:json_path) - \ ? '--project=' . ale#Escape(l:json_path[len(l:dir) + 1: ]) - \ : '' -endfunction - -function! ale#handlers#cppcheck#HandleCppCheckFormat(buffer, lines) abort - " Look for lines like the following. - " - " [test.cpp:5]: (error) Array 'a[10]' accessed at index 10, which is out of bounds - let l:pattern = '\v^\[(.+):(\d+)\]: \(([a-z]+)\) (.+)$' - 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]), - \ 'type': l:match[3] is# 'error' ? 'E' : 'W', - \ 'text': l:match[4], - \}) - endif - endfor - - return l:output -endfunction diff --git a/pack/acp/start/ale/autoload/ale/handlers/cpplint.vim b/pack/acp/start/ale/autoload/ale/handlers/cpplint.vim deleted file mode 100644 index 5c475a5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/css.vim b/pack/acp/start/ale/autoload/ale/handlers/css.vim deleted file mode 100644 index de9eadc..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/elixir.vim b/pack/acp/start/ale/autoload/ale/handlers/elixir.vim deleted file mode 100644 index 2fddf8e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/eslint.vim b/pack/acp/start/ale/autoload/ale/handlers/eslint.vim deleted file mode 100644 index 4d533ff..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/eslint.vim +++ /dev/null @@ -1,246 +0,0 @@ -" Author: w0rp -" Description: Functions for working with eslint, for checking or fixing files. - -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#node#FindExecutable(a:buffer, 'javascript_eslint', [ - \ 'node_modules/.bin/eslint_d', - \ 'node_modules/eslint/bin/eslint.js', - \ 'node_modules/.bin/eslint', - \]) -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 - try - let l:parsed = json_decode(a:lines[-1]) - catch - return [] - endtry - - 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/pack/acp/start/ale/autoload/ale/handlers/fecs.vim b/pack/acp/start/ale/autoload/ale/handlers/fecs.vim deleted file mode 100644 index 5362edb..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/autoload/ale/handlers/flawfinder.vim b/pack/acp/start/ale/autoload/ale/handlers/flawfinder.vim deleted file mode 100644 index b7d2bec..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/gawk.vim b/pack/acp/start/ale/autoload/ale/handlers/gawk.vim deleted file mode 100644 index 50bc4c4..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/gcc.vim b/pack/acp/start/ale/autoload/ale/handlers/gcc.vim deleted file mode 100644 index ec16b97..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/gcc.vim +++ /dev/null @@ -1,159 +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 - 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/pack/acp/start/ale/autoload/ale/handlers/go.vim b/pack/acp/start/ale/autoload/ale/handlers/go.vim deleted file mode 100644 index f17cd86..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/go.vim +++ /dev/null @@ -1,26 +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 - -function! ale#handlers#go#Handler(buffer, lines) abort - let l:pattern = '\v^([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/pack/acp/start/ale/autoload/ale/handlers/haskell.vim b/pack/acp/start/ale/autoload/ale/handlers/haskell.vim deleted file mode 100644 index 3613b1b..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/haskell.vim +++ /dev/null @@ -1,101 +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! 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 = [] - - " 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/pack/acp/start/ale/autoload/ale/handlers/haskell_stack.vim b/pack/acp/start/ale/autoload/ale/handlers/haskell_stack.vim deleted file mode 100644 index 108301a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/hlint.vim b/pack/acp/start/ale/autoload/ale/handlers/hlint.vim deleted file mode 100644 index b9a8c32..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/ktlint.vim b/pack/acp/start/ale/autoload/ale/handlers/ktlint.vim deleted file mode 100644 index ad99948..0000000 --- a/pack/acp/start/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) - \ . ' %t' -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/pack/acp/start/ale/autoload/ale/handlers/languagetool.vim b/pack/acp/start/ale/autoload/ale/handlers/languagetool.vim deleted file mode 100644 index 10e049d..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/languagetool.vim +++ /dev/null @@ -1,74 +0,0 @@ -" Author: Vincent (wahrwolf [at] wolfpit.net) -" Description: languagetool for markdown files -" -call ale#Set('languagetool_executable', 'languagetool') - -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) - - return ale#Escape(l:executable) . ' --autoDetect %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/pack/acp/start/ale/autoload/ale/handlers/markdownlint.vim b/pack/acp/start/ale/autoload/ale/handlers/markdownlint.vim deleted file mode 100644 index daaa1d6..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/markdownlint.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Ty-Lucas Kelley -" Description: Adds support for markdownlint - -function! ale#handlers#markdownlint#Handle(buffer, lines) abort - let l:pattern=': \(\d*\): \(MD\d\{3}\)\(\/\)\([A-Za-z0-9-]\+\)\(.*\)$' - 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] . l:match[3] . l:match[4] . ')' . l:match[5], - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction diff --git a/pack/acp/start/ale/autoload/ale/handlers/ols.vim b/pack/acp/start/ale/autoload/ale/handlers/ols.vim deleted file mode 100644 index 74130a2..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/autoload/ale/handlers/pony.vim b/pack/acp/start/ale/autoload/ale/handlers/pony.vim deleted file mode 100644 index ea84ac4..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/redpen.vim b/pack/acp/start/ale/autoload/ale/handlers/redpen.vim deleted file mode 100644 index 195057c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/ruby.vim b/pack/acp/start/ale/autoload/ale/handlers/ruby.vim deleted file mode 100644 index c28b8b7..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/ruby.vim +++ /dev/null @@ -1,46 +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 - -function! ale#handlers#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/pack/acp/start/ale/autoload/ale/handlers/rust.vim b/pack/acp/start/ale/autoload/ale/handlers/rust.vim deleted file mode 100644 index a7fac46..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/scala.vim b/pack/acp/start/ale/autoload/ale/handlers/scala.vim deleted file mode 100644 index 3fe7a12..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/sh.vim b/pack/acp/start/ale/autoload/ale/handlers/sh.vim deleted file mode 100644 index 75eaf71..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/sh.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: w0rp - -" Get the shell type for a buffer, based on the hashbang line. -function! ale#handlers#sh#GetShellType(buffer) abort - let l:bang_line = get(getbufline(a:buffer, 1), 0, '') - - " Take the shell executable from the hashbang, if we can. - if l:bang_line[:1] is# '#!' - " Remove options like -e, etc. - let l:command = substitute(l:bang_line, ' --\?[a-zA-Z0-9]\+', '', 'g') - - 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 - endif - - return '' -endfunction diff --git a/pack/acp/start/ale/autoload/ale/handlers/sml.vim b/pack/acp/start/ale/autoload/ale/handlers/sml.vim deleted file mode 100644 index 594ee4f..0000000 --- a/pack/acp/start/ale/autoload/ale/handlers/sml.vim +++ /dev/null @@ -1,93 +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 - call add(l:out, { - \ 'bufnr': a:buffer, - \ 'lnum': l:match2[1] + 0, - \ 'col' : l:match2[2] - 1, - \ 'text': l:match2[3], - \ 'type': l:match2[3] =~# '^Warning' ? 'W' : 'E', - \}) - - continue - endif - - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) != 0 - call add(l:out, { - \ 'bufnr': a:buffer, - \ 'lnum': l:match[1] + 0, - \ 'text': l:match[2] . ': ' . l:match[3], - \ 'type': l:match[2] is# 'error' ? 'E' : 'W', - \}) - continue - endif - endfor - - return l:out -endfunction - -" vim:ts=4:sts=4:sw=4 diff --git a/pack/acp/start/ale/autoload/ale/handlers/textlint.vim b/pack/acp/start/ale/autoload/ale/handlers/textlint.vim deleted file mode 100644 index 6d495b0..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/autoload/ale/handlers/tslint.vim b/pack/acp/start/ale/autoload/ale/handlers/tslint.vim deleted file mode 100644 index 9057934..0000000 --- a/pack/acp/start/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#node#FindExecutable(a:buffer, 'typescript_tslint', [ - \ 'node_modules/.bin/tslint', - \]) -endfunction diff --git a/pack/acp/start/ale/autoload/ale/handlers/tsserver.vim b/pack/acp/start/ale/autoload/ale/handlers/tsserver.vim deleted file mode 100644 index f78499a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/unix.vim b/pack/acp/start/ale/autoload/ale/handlers/unix.vim deleted file mode 100644 index f90fd59..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/vale.vim b/pack/acp/start/ale/autoload/ale/handlers/vale.vim deleted file mode 100644 index 2da72fc..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/handlers/writegood.vim b/pack/acp/start/ale/autoload/ale/handlers/writegood.vim deleted file mode 100644 index 8ae61a3..0000000 --- a/pack/acp/start/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#node#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/pack/acp/start/ale/autoload/ale/highlight.vim b/pack/acp/start/ale/autoload/ale/highlight.vim deleted file mode 100644 index cb7911e..0000000 --- a/pack/acp/start/ale/autoload/ale/highlight.vim +++ /dev/null @@ -1,159 +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 - -" 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) - -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 - for l:match in getmatches() - if l:match.group =~? '\v^ALE(Style)?(Error|Warning|Info)(Line)?$' - call matchdelete(l:match.id) - endif - endfor -endfunction - -function! s:highlight_line(bufnr, lnum, group) abort - call 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 - \ ), - \ '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) - - " 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/pack/acp/start/ale/autoload/ale/history.vim b/pack/acp/start/ale/autoload/ale/history.vim deleted file mode 100644 index 27ae74c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/hover.vim b/pack/acp/start/ale/autoload/ale/hover.vim deleted file mode 100644 index 2af35aa..0000000 --- a/pack/acp/start/ale/autoload/ale/hover.vim +++ /dev/null @@ -1,189 +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 - " 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') - \&& ale#Var(l:options.buffer, 'set_balloons') - call balloon_show(a:response.body.displayString) - else - call ale#util#ShowMessage(a:response.body.displayString) - endif - endif - endif -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:result = l:result.contents - - if type(l:result) is v:t_string - " The result can be just a string. - let l:result = [l:result] - endif - - if type(l:result) is v:t_dict - " If the result is an object, then it's markup content. - let l:result = [l:result.value] - endif - - if type(l:result) is v:t_list - " Replace objects with text values. - call map(l:result, 'type(v:val) is v:t_string ? v:val : v:val.value') - let l:str = join(l:result, "\n") - let l:str = substitute(l:str, '^\s*\(.\{-}\)\s*$', '\1', '') - - if !empty(l:str) - if get(l:options, 'hover_from_balloonexpr', 0) - \&& exists('*balloon_show') - \&& ale#Var(l:options.buffer, 'set_balloons') - call balloon_show(l:str) - else - call ale#util#ShowMessage(l:str) - endif - 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 = min([a:column, len(getbufline(l:buffer, a:line)[0])]) - - 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), - \} -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 - -" 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 - -" 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/pack/acp/start/ale/autoload/ale/java.vim b/pack/acp/start/ale/autoload/ale/java.vim deleted file mode 100644 index e641ac6..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/job.vim b/pack/acp/start/ale/autoload/ale/job.vim deleted file mode 100644 index 14b3e48..0000000 --- a/pack/acp/start/ale/autoload/ale/job.vim +++ /dev/null @@ -1,373 +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('g:ale_shell') - let l:shell_arguments = get(g:, 'ale_shell_arguments', &shellcmdflag) - - return split(g: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') - endif - - if has_key(a:options, 'err_cb') - let l:job_options.err_cb = function('s:VimErrorCallback') - 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/pack/acp/start/ale/autoload/ale/julia.vim b/pack/acp/start/ale/autoload/ale/julia.vim deleted file mode 100644 index 18dd9ad..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/linter.vim b/pack/acp/start/ale/autoload/ale/linter.vim deleted file mode 100644 index 78dcd3a..0000000 --- a/pack/acp/start/ale/autoload/ale/linter.vim +++ /dev/null @@ -1,551 +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', -\ 'plaintex': 'tex', -\ 'rmarkdown': 'r', -\ 'systemverilog': 'verilog', -\ '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 is 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 = { -\ 'csh': ['shell'], -\ 'elixir': ['credo', 'dialyxir', 'dogma'], -\ 'go': ['gofmt', 'golint', 'go vet'], -\ 'hack': ['hack'], -\ 'help': [], -\ 'perl': ['perlcritic'], -\ 'perl6': [], -\ 'python': ['flake8', 'mypy', 'pylint'], -\ 'rust': ['cargo'], -\ 'spec': [], -\ 'text': [], -\ 'vue': ['eslint', 'vls'], -\ 'zsh': ['shell'], -\} - -" 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! s:LanguageGetter(buffer) dict abort - return l:self.language -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') - \|| has_key(a:linter, 'executable_callback') - throw '`executable` and `executable_callback` cannot be used when lsp == ''socket''' - endif - elseif has_key(a:linter, 'executable_callback') - let l:obj.executable_callback = a:linter.executable_callback - - if !s:IsCallback(l:obj.executable_callback) - throw '`executable_callback` must be a callback if defined' - 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 'Either `executable` or `executable_callback` must be defined' - endif - - if !l:needs_command - if has_key(a:linter, 'command') - \|| has_key(a:linter, 'command_callback') - \|| has_key(a:linter, 'command_chain') - throw '`command` and `command_callback` and `command_chain` cannot be used when lsp == ''socket''' - endif - elseif has_key(a:linter, 'command_chain') - let l:obj.command_chain = a:linter.command_chain - - if type(l:obj.command_chain) isnot v:t_list - throw '`command_chain` must be a List' - endif - - if empty(l:obj.command_chain) - throw '`command_chain` must contain at least one item' - endif - - let l:link_index = 0 - - for l:link in l:obj.command_chain - let l:err_prefix = 'The `command_chain` item ' . l:link_index . ' ' - - if !s:IsCallback(get(l:link, 'callback')) - throw l:err_prefix . 'must define a `callback` function' - endif - - if has_key(l:link, 'output_stream') - if type(l:link.output_stream) isnot v:t_string - \|| index(['stdout', 'stderr', 'both'], l:link.output_stream) < 0 - throw l:err_prefix . '`output_stream` flag must be ' - \ . "'stdout', 'stderr', or 'both'" - endif - endif - - if has_key(l:link, 'read_buffer') && !s:IsBoolean(l:link.read_buffer) - throw l:err_prefix . 'value for `read_buffer` must be `0` or `1`' - endif - - let l:link_index += 1 - endfor - elseif has_key(a:linter, 'command_callback') - let l:obj.command_callback = a:linter.command_callback - - if !s:IsCallback(l:obj.command_callback) - throw '`command_callback` must be a callback if defined' - 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 'Either `command`, `executable_callback`, `command_chain` ' - \ . 'must be defined' - endif - - if ( - \ has_key(a:linter, 'command') - \ + has_key(a:linter, 'command_chain') - \ + has_key(a:linter, 'command_callback') - \) > 1 - throw 'Only one of `command`, `command_callback`, or `command_chain` ' - \ . 'should be set' - endif - - if !l:needs_address - if has_key(a:linter, 'address') || has_key(a:linter, 'address_callback') - throw '`address` or `address_callback` 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 - elseif has_key(a:linter, 'address_callback') - let l:obj.address_callback = a:linter.address_callback - - if !s:IsCallback(l:obj.address_callback) - throw '`address_callback` must be a callback if defined' - endif - else - throw '`address` or `address_callback` must be defined for getting the LSP address' - endif - - if l:needs_lsp_details - if has_key(a:linter, 'language_callback') - if has_key(a:linter, 'language') - throw 'Only one of `language` or `language_callback` ' - \ . 'should be set' - endif - - let l:obj.language_callback = get(a:linter, 'language_callback') - - if !s:IsCallback(l:obj.language_callback) - throw '`language_callback` must be a callback for LSP linters' - endif - else - " Default to using the filetype as the language. - let l:Language = get(a:linter, 'language', a:filetype) - - if type(l:Language) is v:t_string - " Make 'language_callback' return the 'language' value. - let l:obj.language = l:Language - let l:obj.language_callback = function('s:LanguageGetter') - elseif type(l:Language) is v:t_func - let l:obj.language_callback = l:Language - else - throw '`language` must be a String or Funcref' - endif - 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 if defined' - endif - elseif has_key(a:linter, 'project_root_callback') - let l:obj.project_root_callback = a:linter.project_root_callback - - if !s:IsCallback(l:obj.project_root_callback) - throw '`project_root_callback` must be a callback if defined' - endif - else - throw '`project_root` or `project_root_callback` 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_callback') - if has_key(a:linter, 'initialization_options') - throw 'Only one of `initialization_options` or ' - \ . '`initialization_options_callback` should be set' - endif - - let l:obj.initialization_options_callback = a:linter.initialization_options_callback - - if !s:IsCallback(l:obj.initialization_options_callback) - throw '`initialization_options_callback` must be a callback if defined' - endif - elseif 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 String or Function if defined' - endif - endif - - if has_key(a:linter, 'lsp_config_callback') - if has_key(a:linter, 'lsp_config') - throw 'Only one of `lsp_config` or `lsp_config_callback` should be set' - endif - - let l:obj.lsp_config_callback = a:linter.lsp_config_callback - - if !s:IsCallback(l:obj.lsp_config_callback) - throw '`lsp_config_callback` must be a callback if defined' - endif - elseif 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) - throw '`lint_file` must be `0` or `1`' - endif - - " An option indicating that the buffer should be read. - let l:obj.read_buffer = get(a:linter, 'read_buffer', !l:obj.lint_file) - - if !s:IsBoolean(l:obj.read_buffer) - throw '`read_buffer` must be `0` or `1`' - endif - - if l:obj.lint_file && l:obj.read_buffer - throw 'Only one of `lint_file` or `read_buffer` can be `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 - - for l:key in filter(keys(a:linter), 'v:val[-9:] is# ''_callback'' || v:val is# ''command_chain''') - if !get(g:, 'ale_ignore_2_4_warnings') - execute 'echom l:key . '' is deprecated. Use `let g:ale_ignore_2_4_warnings = 1` to disable this message.''' - endif - - break - endfor - - 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 - -" Given a buffer and linter, get the executable String for the linter. -function! ale#linter#GetExecutable(buffer, linter) abort - let l:Executable = has_key(a:linter, 'executable_callback') - \ ? function(a:linter.executable_callback) - \ : a:linter.executable - - return type(l:Executable) is v:t_func - \ ? l:Executable(a:buffer) - \ : l:Executable -endfunction - -" Given a buffer and linter, get the command String for the linter. -" The command_chain key is not supported. -function! ale#linter#GetCommand(buffer, linter) abort - let l:Command = has_key(a:linter, 'command_callback') - \ ? function(a:linter.command_callback) - \ : 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 = has_key(a:linter, 'address_callback') - \ ? function(a:linter.address_callback) - \ : a:linter.address - - return type(l:Address) is v:t_func - \ ? l:Address(a:buffer) - \ : l:Address -endfunction diff --git a/pack/acp/start/ale/autoload/ale/list.vim b/pack/acp/start/ale/autoload/ale/list.vim deleted file mode 100644 index 80a3021..0000000 --- a/pack/acp/start/ale/autoload/ale/list.vim +++ /dev/null @@ -1,197 +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 - for l:buf in range(1, bufnr('$')) - if getbufvar(l:buf, '&buftype') is# 'quickfix' - return 1 - endif - endfor - - return 0 -endfunction - -" Check if we should open the list, based on the save event being fired, and -" that setting being on, or the setting just being set to `1`. -function! s:ShouldOpen(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 is 1 || (l:val is# 'on_save' && l:saved) -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 - - call sort(l:list, function('ale#util#LocItemCompareWithText')) - call uniq(l:list, function('ale#util#LocItemCompareWithText')) - - return 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) - - for l:id in l:ids - if has('nvim') - call setloclist(l:id, s:FixList(a:buffer, a:loclist), ' ', l:title) - else - call setloclist(l:id, s:FixList(a:buffer, a:loclist)) - call setloclist(l:id, [], 'r', {'title': l:title}) - endif - endfor - endif - - " Open a window to show the problems if we need to. - " - " We'll check if the current buffer's List is not empty here, so the - " window will only be opened if the current buffer has problems. - if s:ShouldOpen(a:buffer) && !empty(a:loclist) - let l:winnr = winnr() - let l:mode = mode() - let l:reset_visual_selection = l:mode is? 'v' || l:mode is# "\" - let l:reset_character_selection = l:mode is? 's' || l:mode is# "\" - - " 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 - - if l:reset_visual_selection || l:reset_character_selection - " If we were in a selection mode before, select the last selection. - normal! gv - - if l:reset_character_selection - " Switch back to Select mode, if we were in that. - normal! "\" - endif - endif - 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 - -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! s:CloseWindowIfNeeded(buffer) abort - if ale#Var(a:buffer, 'keep_list_window_open') || !s:ShouldOpen(a:buffer) - return - endif - - 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 - 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 - endif - endfor - endif - " Ignore 'Cannot close last window' errors. - catch /E444/ - endtry -endfunction diff --git a/pack/acp/start/ale/autoload/ale/loclist_jumping.vim b/pack/acp/start/ale/autoload/ale/loclist_jumping.vim deleted file mode 100644 index 55097d1..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/lsp.vim b/pack/acp/start/ale/autoload/ale/lsp.vim deleted file mode 100644 index 017096c..0000000 --- a/pack/acp/start/ale/autoload/ale/lsp.vim +++ /dev/null @@ -1,631 +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, - \ 'references': 0, - \ 'completion': 0, - \ 'completion_trigger_characters': [], - \ 'definition': 0, - \ 'typeDefinition': 0, - \ 'symbol_search': 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 - 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 get(a:capabilities, 'referencesProvider') is v:true - let a:conn.capabilities.references = 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 get(a:capabilities, 'typeDefinitionProvider') is v:true - let a:conn.capabilities.typeDefinition = 1 - endif - - if get(a:capabilities, 'workspaceSymbolProvider') is v:true - let a:conn.capabilities.symbol_search = 1 - 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.symbol_search = 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, - \ }, - \ 'publishDiagnostics': { - \ 'relatedInformation': v:true, - \ }, - \ 'codeAction': { - \ 'dynamicRegistration': v:false, - \ }, - \ '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)}, - \} - - 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 - 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/pack/acp/start/ale/autoload/ale/lsp/message.vim b/pack/acp/start/ale/autoload/ale/lsp/message.vim deleted file mode 100644 index b6b14a2..0000000 --- a/pack/acp/start/ale/autoload/ale/lsp/message.vim +++ /dev/null @@ -1,164 +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#path#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#path#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#path#ToURI(expand('#' . a:buffer . ':p')), - \ 'version': ale#lsp#message#GetNextVersionID(), - \ }, - \ 'contentChanges': [{'text': join(l:lines, "\n") . "\n"}] - \}] -endfunction - -function! ale#lsp#message#DidSave(buffer) abort - return [1, 'textDocument/didSave', { - \ 'textDocument': { - \ 'uri': ale#path#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \}] -endfunction - -function! ale#lsp#message#DidClose(buffer) abort - return [1, 'textDocument/didClose', { - \ 'textDocument': { - \ 'uri': ale#path#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#path#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#path#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#path#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#path#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#path#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 diff --git a/pack/acp/start/ale/autoload/ale/lsp/reset.vim b/pack/acp/start/ale/autoload/ale/lsp/reset.vim deleted file mode 100644 index 2fc7f0a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/lsp/response.vim b/pack/acp/start/ale/autoload/ale/lsp/response.vim deleted file mode 100644 index 30da77e..0000000 --- a/pack/acp/start/ale/autoload/ale/lsp/response.vim +++ /dev/null @@ -1,151 +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') - let l:related = deepcopy(l:diagnostic.relatedInformation) - call map(l:related, {key, val -> - \ ale#path#FromURI(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/pack/acp/start/ale/autoload/ale/lsp/tsserver_message.vim b/pack/acp/start/ale/autoload/ale/lsp/tsserver_message.vim deleted file mode 100644 index d691951..0000000 --- a/pack/acp/start/ale/autoload/ale/lsp/tsserver_message.vim +++ /dev/null @@ -1,79 +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) abort - return [0, 'ts@completions', { - \ 'line': a:line, - \ 'offset': a:column, - \ 'file': expand('#' . a:buffer . ':p'), - \ 'prefix': a:prefix, - \}] -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#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 diff --git a/pack/acp/start/ale/autoload/ale/lsp_linter.vim b/pack/acp/start/ale/autoload/ale/lsp_linter.vim deleted file mode 100644 index 190a16b..0000000 --- a/pack/acp/start/ale/autoload/ale/lsp_linter.vim +++ /dev/null @@ -1,466 +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', {}) - -" 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#path#FromURI(a:response.params.uri) - let l:buffer = bufnr('^' . l:filename . '$') - 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:buffer = bufnr('^' . a:response.body.file . '$') - 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 - else - 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 - endif - - if l:no_changes - return - endif - - let l:loclist = get(l:info, 'semantic_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 - - " 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], l: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 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') - 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_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 - - " Try to get a global setting for the root - if has_key(g:ale_lsp_root, a:linter.name) - let l:Root = g:ale_lsp_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#util#GetFunction(a:linter.language_callback)(l:buffer) - - 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 - - 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:command = ale#command#FormatCommand(l:buffer, a:executable, a:command, 0, v:false)[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. - 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) - let l:save_message = ale#lsp#message#DidSave(l:buffer) - 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 - -" 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 - -" Just for tests. -function! ale#lsp_linter#SetLSPLinterMap(replacement_map) abort - let s:lsp_linter_map = a:replacement_map -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/pack/acp/start/ale/autoload/ale/node.vim b/pack/acp/start/ale/autoload/ale/node.vim deleted file mode 100644 index 6906012..0000000 --- a/pack/acp/start/ale/autoload/ale/node.vim +++ /dev/null @@ -1,42 +0,0 @@ -" Author: w0rp -" Description: Functions for working with Node executables. - -call ale#Set('windows_node_executable_path', 'node.exe') - -" 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 Node program. -" -" The use_global and executable options for the relevant program will be used. -function! ale#node#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 - - for l:path in a:path_list - let l:executable = ale#path#FindNearestFile(a:buffer, l:path) - - if !empty(l:executable) - return l:executable - endif - endfor - - return ale#Var(a:buffer, a:base_var_name . '_executable') -endfunction - -" 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/pack/acp/start/ale/autoload/ale/other_source.vim b/pack/acp/start/ale/autoload/ale/other_source.vim deleted file mode 100644 index 1a09203..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/path.vim b/pack/acp/start/ale/autoload/ale/path.vim deleted file mode 100644 index 84c26d0..0000000 --- a/pack/acp/start/ale/autoload/ale/path.vim +++ /dev/null @@ -1,224 +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 - -" 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, an 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 serach fails, try the global executable instead. - if empty(l:path) - let l:path = a:global_fallback - endif - - return l:path -endfunction - -" Output 'cd && ' -" This function can be used changing the directory for a linter command. -function! ale#path#CdString(directory) abort - if has('win32') - return 'cd /d ' . ale#Escape(a:directory) . ' && ' - else - return 'cd ' . ale#Escape(a:directory) . ' && ' - endif -endfunction - -" Output 'cd && ' -" This function can be used changing the directory for a linter command. -function! ale#path#BufferCdString(buffer) abort - return ale#path#CdString(fnamemodify(bufname(a:buffer), ':p:h')) -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')) - -" 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# '/' - 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#ToURI(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#FromURI(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/pack/acp/start/ale/autoload/ale/pattern_options.vim b/pack/acp/start/ale/autoload/ale/pattern_options.vim deleted file mode 100644 index 14e2142..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/powershell.vim b/pack/acp/start/ale/autoload/ale/powershell.vim deleted file mode 100644 index 8c16320..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/preview.vim b/pack/acp/start/ale/autoload/ale/preview.vim deleted file mode 100644 index 6d58aca..0000000 --- a/pack/acp/start/ale/autoload/ale/preview.vim +++ /dev/null @@ -1,98 +0,0 @@ -" Author: w0rp -" Description: Preview windows for showing whatever information in. - -" 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') - - 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 -endfunction - -function! s:Open(open_in_tab) abort - let l:item_list = get(b:, 'ale_preview_item_list', []) - let l:item = get(l:item_list, getpos('.')[1] - 1, {}) - - if empty(l:item) - return - endif - - if !a:open_in_tab - :q! - endif - - call ale#util#Open( - \ l:item.filename, - \ l:item.line, - \ l:item.column, - \ {'open_in_tab': a:open_in_tab}, - \) -endfunction - -function! ale#preview#OpenSelectionInBuffer() abort - call s:Open(0) -endfunction - -function! ale#preview#OpenSelectionInTab() abort - call s:Open(1) -endfunction diff --git a/pack/acp/start/ale/autoload/ale/python.vim b/pack/acp/start/ale/autoload/ale/python.vim deleted file mode 100644 index 7ed2236..0000000 --- a/pack/acp/start/ale/autoload/ale/python.vim +++ /dev/null @@ -1,157 +0,0 @@ -" Author: w0rp -" Description: Functions for integrating with Python linters. - -call ale#Set('python_auto_pipenv', '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 . '/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 . '/Pipfile') - \|| filereadable(l:path . '/Pipfile.lock') - 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 diff --git a/pack/acp/start/ale/autoload/ale/references.vim b/pack/acp/start/ale/autoload/ale/references.vim deleted file mode 100644 index b9725e1..0000000 --- a/pack/acp/start/ale/autoload/ale/references.vim +++ /dev/null @@ -1,127 +0,0 @@ -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#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, { - \ 'filename': l:response_item.file, - \ 'line': l:response_item.start.line, - \ 'column': l:response_item.start.offset, - \ 'match': substitute(l:response_item.lineText, '^\s*\(.\{-}\)\s*$', '\1', ''), - \}) - endfor - - if empty(l:item_list) - call ale#util#Execute('echom ''No references found.''') - else - call ale#preview#ShowSelection(l:item_list, l:options) - endif - endif - 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, { - \ 'filename': ale#path#FromURI(l:response_item.uri), - \ 'line': l:response_item.range.start.line + 1, - \ 'column': l:response_item.range.start.character + 1, - \}) - endfor - endif - - if empty(l:item_list) - call ale#util#Execute('echom ''No references found.''') - else - call ale#preview#ShowSelection(l:item_list, l:options) - 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 - \} -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 - endif - endfor - 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/pack/acp/start/ale/autoload/ale/ruby.vim b/pack/acp/start/ale/autoload/ale/ruby.vim deleted file mode 100644 index 15e835c..0000000 --- a/pack/acp/start/ale/autoload/ale/ruby.vim +++ /dev/null @@ -1,76 +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 - diff --git a/pack/acp/start/ale/autoload/ale/semver.vim b/pack/acp/start/ale/autoload/ale/semver.vim deleted file mode 100644 index e3eb49c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/sign.vim b/pack/acp/start/ale/autoload/ale/sign.vim deleted file mode 100644 index 7395b0e..0000000 --- a/pack/acp/start/ale/autoload/ale/sign.vim +++ /dev/null @@ -1,388 +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) -" 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) - -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 - redir => l:output - 0verbose silent highlight SignColumn - redir end - - 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 - -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 - -" Read sign data for a buffer to a list of lines. -function! ale#sign#ReadSigns(buffer) abort - redir => l:output - silent execute 'sign place buffer=' . a:buffer - redir end - - return split(l:output, "\n") -endfunction - -" Given a list of lines for sign output, return a List of [line, id, group] -function! ale#sign#ParseSigns(line_list) abort - " 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 - let l:pattern = '\v^.*\=(\d+).*\=(\d+).*\=(ALE[a-zA-Z]+Sign)' - 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 - let l:line_list = ale#sign#ReadSigns(a:buffer) - - return ale#sign#ParseSigns(l:line_list) -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 - \ . ' 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) - \ . ' 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 - \ . ' 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 - \ . ' 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 diff --git a/pack/acp/start/ale/autoload/ale/socket.vim b/pack/acp/start/ale/autoload/ale/socket.vim deleted file mode 100644 index 7e069fb..0000000 --- a/pack/acp/start/ale/autoload/ale/socket.vim +++ /dev/null @@ -1,152 +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('tcp', 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/pack/acp/start/ale/autoload/ale/statusline.vim b/pack/acp/start/ale/autoload/ale/statusline.vim deleted file mode 100644 index 6b93ba5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/autoload/ale/swift.vim b/pack/acp/start/ale/autoload/ale/swift.vim deleted file mode 100644 index b31b8dc..0000000 --- a/pack/acp/start/ale/autoload/ale/swift.vim +++ /dev/null @@ -1,13 +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 diff --git a/pack/acp/start/ale/autoload/ale/symbol.vim b/pack/acp/start/ale/autoload/ale/symbol.vim deleted file mode 100644 index ae4151a..0000000 --- a/pack/acp/start/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#path#FromURI(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/pack/acp/start/ale/autoload/ale/test.vim b/pack/acp/start/ale/autoload/ale/test.vim deleted file mode 100644 index 082d91f..0000000 --- a/pack/acp/start/ale/autoload/ale/test.vim +++ /dev/null @@ -1,187 +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 - -" 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: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 - - silent! noautocmd execute 'file ' . fnameescape(ale#path#Simplify(l:full_path)) -endfunction - -function! s:RemoveModule(results) abort - for l:item in a:results - if has_key(l:item, 'module') - call remove(l:item, 'module') - endif - endfor -endfunction - -" Return loclist data without the module string, only in newer Vim versions. -function! ale#test#GetLoclistWithoutModule() abort - let l:results = getloclist(0) - call s:RemoveModule(l:results) - - return l:results -endfunction - -function! ale#test#GetQflistWithoutModule() abort - let l:results = getqflist() - call s:RemoveModule(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 command_chain linters. - 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/pack/acp/start/ale/autoload/ale/toggle.vim b/pack/acp/start/ale/autoload/ale/toggle.vim deleted file mode 100644 index 1311e52..0000000 --- a/pack/acp/start/ale/autoload/ale/toggle.vim +++ /dev/null @@ -1,100 +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 - call ale#virtualtext#Clear() - 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 - execute '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/pack/acp/start/ale/autoload/ale/uri.vim b/pack/acp/start/ale/autoload/ale/uri.vim deleted file mode 100644 index 934637d..0000000 --- a/pack/acp/start/ale/autoload/ale/uri.vim +++ /dev/null @@ -1,18 +0,0 @@ -" This probably doesn't handle Unicode characters well. -function! ale#uri#Encode(value) abort - return substitute( - \ a:value, - \ '\([^a-zA-Z0-9\\/$\-_.!*''(),]\)', - \ '\=printf(''%%%02x'', char2nr(submatch(1)))', - \ 'g' - \) -endfunction - -function! ale#uri#Decode(value) abort - return substitute( - \ a:value, - \ '%\(\x\x\)', - \ '\=nr2char(''0x'' . submatch(1))', - \ 'g' - \) -endfunction diff --git a/pack/acp/start/ale/autoload/ale/util.vim b/pack/acp/start/ale/autoload/ale/util.vim deleted file mode 100644 index e756360..0000000 --- a/pack/acp/start/ale/autoload/ale/util.vim +++ /dev/null @@ -1,479 +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 - 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) - execute 'echo a:string' - else - call ale#preview#Show(split(a:string, "\n"), { - \ 'filetype': 'ale-preview.message', - \ 'stay_here': 1, - \}) - 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 -" vertical-split -" horizontal-split -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# 'horizontal-split' - call ale#util#Execute('split ' . l:args_to_open) - elseif l:open_in is# 'vertical-split' - 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 - -function! s:LoadArgCount(function) abort - let l:Function = a:function - - redir => l:output - silent! function Function - redir END - - if !exists('l:output') - return 0 - endif - - 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/ - 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 - - call writefile(l:corrected_lines, a:filename, 'S') " 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 - diff --git a/pack/acp/start/ale/autoload/ale/virtualtext.vim b/pack/acp/start/ale/autoload/ale/virtualtext.vim deleted file mode 100644 index d7c5360..0000000 --- a/pack/acp/start/ale/autoload/ale/virtualtext.vim +++ /dev/null @@ -1,135 +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] - -if has('nvim-0.3.2') - let s:ns_id = nvim_create_namespace('ale') -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 - -function! ale#virtualtext#Clear() abort - if !has('nvim-0.3.2') - return - endif - - let l:buffer = bufnr('') - - call nvim_buf_clear_highlight(l:buffer, s:ns_id, 0, -1) -endfunction - -function! ale#virtualtext#ShowMessage(message, hl_group) abort - if !has('nvim-0.3.2') - return - endif - - let l:line = line('.') - let l:buffer = bufnr('') - let l:prefix = get(g:, 'ale_virtualtext_prefix', '> ') - - call nvim_buf_set_virtual_text(l:buffer, s:ns_id, l:line-1, [[l:prefix.a:message, a:hl_group]], {}) -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#ShowCursorWarning(...) abort - if !g:ale_virtualtext_cursor - 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() - - if !empty(l:loc) - let l:msg = l:loc.text - let l:hl_group = 'ALEVirtualTextInfo' - let l:type = get(l:loc, 'type', 'E') - - if l:type is# 'E' - if get(l:loc, 'sub_type', '') is# 'style' - let l:hl_group = 'ALEVirtualTextStyleError' - else - let l:hl_group = 'ALEVirtualTextError' - endif - elseif l:type is# 'W' - if get(l:loc, 'sub_type', '') is# 'style' - let l:hl_group = 'ALEVirtualTextStyleWarning' - else - let l:hl_group = 'ALEVirtualTextWarning' - endif - endif - - call ale#virtualtext#ShowMessage(l:msg, l:hl_group) - endif -endfunction - -function! ale#virtualtext#ShowCursorWarningWithDelay() abort - let l:buffer = bufnr('') - - if !g:ale_virtualtext_cursor - 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 - diff --git a/pack/acp/start/ale/doc/ale-ada.txt b/pack/acp/start/ale/doc/ale-ada.txt deleted file mode 100644 index 93e3261..0000000 --- a/pack/acp/start/ale/doc/ale-ada.txt +++ /dev/null @@ -1,25 +0,0 @@ -=============================================================================== -ALE Ada Integration *ale-ada-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. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-ansible.txt b/pack/acp/start/ale/doc/ale-ansible.txt deleted file mode 100644 index 3a4efaa..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-asciidoc.txt b/pack/acp/start/ale/doc/ale-asciidoc.txt deleted file mode 100644 index 86629fd..0000000 --- a/pack/acp/start/ale/doc/ale-asciidoc.txt +++ /dev/null @@ -1,18 +0,0 @@ -=============================================================================== -ALE AsciiDoc Integration *ale-asciidoc-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/pack/acp/start/ale/doc/ale-asm.txt b/pack/acp/start/ale/doc/ale-asm.txt deleted file mode 100644 index a97c6d0..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-awk.txt b/pack/acp/start/ale/doc/ale-awk.txt deleted file mode 100644 index b9c5c34..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-bib.txt b/pack/acp/start/ale/doc/ale-bib.txt deleted file mode 100644 index 35998c3..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-c.txt b/pack/acp/start/ale/doc/ale-c.txt deleted file mode 100644 index ec7304f..0000000 --- a/pack/acp/start/ale/doc/ale-c.txt +++ /dev/null @@ -1,324 +0,0 @@ -=============================================================================== -ALE C Integration *ale-c-options* - - -=============================================================================== -Global Options - -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: `0` - - 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|. - - If |g:ale_c_parse_makefile| or |b:ale_c_parse_makefile| is set to `1`, the - output of `make -n` will be preferred over `compile_commands.json` files. - - -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. - - -=============================================================================== -clang *ale-c-clang* - -g:ale_c_clang_executable *g:ale_c_clang_executable* - *b:ale_c_clang_executable* - Type: |String| - Default: `'clang'` - - This variable can be changed to use a different executable for clang. - - -g:ale_c_clang_options *g:ale_c_clang_options* - *b:ale_c_clang_options* - Type: |String| - Default: `'-std=c11 -Wall'` - - This variable can be changed to modify flags given to clang. - - -=============================================================================== -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 change to modify flags given to clang-format. - - -=============================================================================== -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. - - -=============================================================================== -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. - - -=============================================================================== -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++. - - -=============================================================================== -gcc *ale-c-gcc* - -g:ale_c_gcc_executable *g:ale_c_gcc_executable* - *b:ale_c_gcc_executable* - Type: |String| - Default: `'gcc'` - - This variable can be changed to use a different executable for gcc. - - -g:ale_c_gcc_options *g:ale_c_gcc_options* - *b:ale_c_gcc_options* - Type: |String| - Default: `'-std=c11 -Wall'` - - This variable can be change to modify flags given to gcc. - - -=============================================================================== -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. - - -=============================================================================== -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. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-chef.txt b/pack/acp/start/ale/doc/ale-chef.txt deleted file mode 100644 index 75e144e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-clojure.txt b/pack/acp/start/ale/doc/ale-clojure.txt deleted file mode 100644 index 2bf00c0..0000000 --- a/pack/acp/start/ale/doc/ale-clojure.txt +++ /dev/null @@ -1,28 +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 - -=============================================================================== -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/pack/acp/start/ale/doc/ale-cloudformation.txt b/pack/acp/start/ale/doc/ale-cloudformation.txt deleted file mode 100644 index 59c6af0..0000000 --- a/pack/acp/start/ale/doc/ale-cloudformation.txt +++ /dev/null @@ -1,14 +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. - -https://github.com/awslabs/cfn-python-lint - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: - diff --git a/pack/acp/start/ale/doc/ale-cmake.txt b/pack/acp/start/ale/doc/ale-cmake.txt deleted file mode 100644 index 602637b..0000000 --- a/pack/acp/start/ale/doc/ale-cmake.txt +++ /dev/null @@ -1,43 +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-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/pack/acp/start/ale/doc/ale-cpp.txt b/pack/acp/start/ale/doc/ale-cpp.txt deleted file mode 100644 index 50855c1..0000000 --- a/pack/acp/start/ale/doc/ale-cpp.txt +++ /dev/null @@ -1,322 +0,0 @@ -=============================================================================== -ALE C++ Integration *ale-cpp-options* - - -=============================================================================== -Global Options - -The following C options also apply to some C++ linters too. - -* |g:ale_c_build_dir_names| -* |g:ale_c_build_dir| -* |g:ale_c_parse_makefile| -* |g:ale_c_parse_compile_commands| - - -=============================================================================== -clang *ale-cpp-clang* - -g:ale_cpp_clang_executable *g:ale_cpp_clang_executable* - *b:ale_cpp_clang_executable* - Type: |String| - Default: `'clang++'` - - This variable can be changed to use a different executable for clang. - - -g:ale_cpp_clang_options *g:ale_cpp_clang_options* - *b:ale_cpp_clang_options* - Type: |String| - Default: `'-std=c++14 -Wall'` - - This variable can be changed to modify flags given to clang. - - -=============================================================================== -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. - - -=============================================================================== -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. - - -=============================================================================== -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. - - -=============================================================================== -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. - - -=============================================================================== -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. - - -=============================================================================== -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. - - -=============================================================================== -gcc *ale-cpp-gcc* - -g:ale_cpp_gcc_executable *g:ale_cpp_gcc_executable* - *b:ale_cpp_gcc_executable* - Type: |String| - Default: `'gcc'` - - This variable can be changed to use a different executable for gcc. - - -g:ale_cpp_gcc_options *g:ale_cpp_gcc_options* - *b:ale_cpp_gcc_options* - Type: |String| - Default: `'-std=c++14 -Wall'` - - This variable can be changed to modify flags given to gcc. - - -=============================================================================== -uncrustify *ale-cpp-uncrustify* - -See |ale-c-uncrustify| for information about the available options. - - -=============================================================================== -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. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-cs.txt b/pack/acp/start/ale/doc/ale-cs.txt deleted file mode 100644 index 01e6348..0000000 --- a/pack/acp/start/ale/doc/ale-cs.txt +++ /dev/null @@ -1,112 +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 - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-css.txt b/pack/acp/start/ale/doc/ale-css.txt deleted file mode 100644 index ff74b26..0000000 --- a/pack/acp/start/ale/doc/ale-css.txt +++ /dev/null @@ -1,47 +0,0 @@ -=============================================================================== -ALE CSS Integration *ale-css-options* - - -=============================================================================== -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| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-cuda.txt b/pack/acp/start/ale/doc/ale-cuda.txt deleted file mode 100644 index 0e53f75..0000000 --- a/pack/acp/start/ale/doc/ale-cuda.txt +++ /dev/null @@ -1,32 +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. - -=============================================================================== -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/pack/acp/start/ale/doc/ale-d.txt b/pack/acp/start/ale/doc/ale-d.txt deleted file mode 100644 index 5559606..0000000 --- a/pack/acp/start/ale/doc/ale-d.txt +++ /dev/null @@ -1,23 +0,0 @@ -=============================================================================== -ALE D Integration *ale-d-options* - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-dart.txt b/pack/acp/start/ale/doc/ale-dart.txt deleted file mode 100644 index a6d88dd..0000000 --- a/pack/acp/start/ale/doc/ale-dart.txt +++ /dev/null @@ -1,71 +0,0 @@ -=============================================================================== -ALE Dart Integration *ale-dart-options* - - -=============================================================================== -dartanalyzer *ale-dart-dartanalyzer* - -Installation -------------------------------------------------------------------------------- - -Install Dart via whatever means. `dartanalyzer` will be included in the SDK. - -You can add the SDK to `$PATH`, as described here: -https://www.dartlang.org/tools/sdk - -If you have installed Dart on Linux, you can also try the following: > - " Set the executable path for dartanalyzer to the absolute path to it. - let g:ale_dart_dartanalyzer_executable = '/usr/lib/dart/bin/dartanalyzer' -< -... or similarly for wherever your Dart SDK lives. This should work without -having to modify `$PATH`. - -ALE can only check for problems with `dartanalyzer` with the file on disk. -See |ale-lint-file-linters| - -Options -------------------------------------------------------------------------------- - -g:ale_dart_dartanalyzer_executable *g:ale_dart_dartanalyzer_executable* - *b:ale_dart_dartanalyzer_executable* - Type: |String| - Default: `'dartanalyzer'` - - This variable can be set to change the path to dartanalyzer. - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-development.txt b/pack/acp/start/ale/doc/ale-development.txt deleted file mode 100644 index 16b1648..0000000 --- a/pack/acp/start/ale/doc/ale-development.txt +++ /dev/null @@ -1,358 +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| - -=============================================================================== -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. Use `execute 'echo' ...` 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 in Travis CI and AppVeyor. ALE -runs tests with the following versions of Vim in the following environments. - -1. Vim 8.0.0027 on Linux via Travis CI. -2. Vim 8.1.0519 on Linux via Travis CI. -3. NeoVim 0.2.0 on Linux via Travis CI. -4. NeoVim 0.3.5 on Linux via Travis CI. -5. 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. - -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 command callbacks -> Write tests in `test/command_callback` -* 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 - -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 table in -the README, and also into the |ale-support| list in the main help file. If you -forget to keep them both in sync, you should see an error like the following -in Travis CI. > - - ======================================== - diff README.md and doc/ale.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/command_callback` 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. -`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. -`AssertFixer results` - Check the fixer results -`AssertFixerNotExecuted` - Check that fixers will not be executed. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-dockerfile.txt b/pack/acp/start/ale/doc/ale-dockerfile.txt deleted file mode 100644 index 284c6a1..0000000 --- a/pack/acp/start/ale/doc/ale-dockerfile.txt +++ /dev/null @@ -1,60 +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. - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-elixir.txt b/pack/acp/start/ale/doc/ale-elixir.txt deleted file mode 100644 index 5864f72..0000000 --- a/pack/acp/start/ale/doc/ale-elixir.txt +++ /dev/null @@ -1,89 +0,0 @@ -=============================================================================== -ALE Elixir Integration *ale-elixir-options* - - -=============================================================================== -mix *ale-elixir-mix* - - -The `mix` linter is disabled by default, as it can bee 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. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-elm.txt b/pack/acp/start/ale/doc/ale-elm.txt deleted file mode 100644 index bb7a613..0000000 --- a/pack/acp/start/ale/doc/ale-elm.txt +++ /dev/null @@ -1,68 +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-lsp *ale-elm-elm-lsp* - -g:ale_elm_lsp_executable *g:ale_elm_lsp_executable* - *b:ale_elm_lsp_executable* - Type: |String| - Default: `'elm-lsp'` - - See |ale-integrations-local-executables| - - -g:ale_elm_lsp_use_global *g:ale_elm_lsp_use_global* - *b:ale_elm_lsp_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - -=============================================================================== -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/pack/acp/start/ale/doc/ale-erlang.txt b/pack/acp/start/ale/doc/ale-erlang.txt deleted file mode 100644 index 59993a9..0000000 --- a/pack/acp/start/ale/doc/ale-erlang.txt +++ /dev/null @@ -1,58 +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_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. - -------------------------------------------------------------------------------- -erlc *ale-erlang-erlc* - -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`. - - -------------------------------------------------------------------------------- -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/pack/acp/start/ale/doc/ale-eruby.txt b/pack/acp/start/ale/doc/ale-eruby.txt deleted file mode 100644 index d75d386..0000000 --- a/pack/acp/start/ale/doc/ale-eruby.txt +++ /dev/null @@ -1,37 +0,0 @@ -=============================================================================== -ALE Eruby Integration *ale-eruby-options* - -There are four linters for `eruby` files: - -- `erb` -- `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|. - -=============================================================================== -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/pack/acp/start/ale/doc/ale-fish.txt b/pack/acp/start/ale/doc/ale-fish.txt deleted file mode 100644 index 8450b38..0000000 --- a/pack/acp/start/ale/doc/ale-fish.txt +++ /dev/null @@ -1,14 +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. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-fortran.txt b/pack/acp/start/ale/doc/ale-fortran.txt deleted file mode 100644 index c9b7e8e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-fountain.txt b/pack/acp/start/ale/doc/ale-fountain.txt deleted file mode 100644 index ac0870c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-fuse.txt b/pack/acp/start/ale/doc/ale-fuse.txt deleted file mode 100644 index 0849c37..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-gitcommit.txt b/pack/acp/start/ale/doc/ale-gitcommit.txt deleted file mode 100644 index 38f3fd9..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-glsl.txt b/pack/acp/start/ale/doc/ale-glsl.txt deleted file mode 100644 index 257de75..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-go.txt b/pack/acp/start/ale/doc/ale-go.txt deleted file mode 100644 index 611e3fd..0000000 --- a/pack/acp/start/ale/doc/ale-go.txt +++ /dev/null @@ -1,234 +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_options* - *b:ale_go_go_options* - - Type: |String| - Default: `'go'` - - The executable that will be run for the `gobuild` and `govet` linters, and - the `gomod` fixer. - - -=============================================================================== -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: `''` - - -=============================================================================== -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. - - -=============================================================================== -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. - - -=============================================================================== -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* - -g:ale_go_gopls_executable *g:ale_go_gopls_executable* - *b:ale_go_gopls_executable* - Type: |String| - Default: `'gopls'` - - Location of the gopls binary file. - - -g:ale_go_gopls_options *g:ale_go_gopls_options* - *b:ale_go_gopls_options* - Type: |String| - Default: `''` - - -=============================================================================== -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. - - -=============================================================================== -staticcheck *ale-go-staticcheck* - -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: `0` - - When set to `1`, the whole Go package will be checked instead of only the - current file. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-graphql.txt b/pack/acp/start/ale/doc/ale-graphql.txt deleted file mode 100644 index 603694b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-hack.txt b/pack/acp/start/ale/doc/ale-hack.txt deleted file mode 100644 index 4776b8c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-handlebars.txt b/pack/acp/start/ale/doc/ale-handlebars.txt deleted file mode 100644 index 061c5d3..0000000 --- a/pack/acp/start/ale/doc/ale-handlebars.txt +++ /dev/null @@ -1,25 +0,0 @@ -=============================================================================== -ALE Handlebars Integration *ale-handlebars-options* - - -=============================================================================== -ember-template-lint *ale-handlebars-embertemplatelint* - -g:ale_handlebars_embertemplatelint_executable - *g:ale_handlebars_embertemplatelint_executable* - Type: |String| *b:ale_handlebars_embertemplatelint_executable* - Default: `'ember-template-lint'` - - See |ale-integrations-local-executables| - - -g:ale_handlebars_embertemplatelint_use_global - *g:ale_handlebars_embertemplatelint_use_global* - Type: |Number| *b:ale_handlebars_embertemplatelint_use_global* - 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/pack/acp/start/ale/doc/ale-haskell.txt b/pack/acp/start/ale/doc/ale-haskell.txt deleted file mode 100644 index e2073e3..0000000 --- a/pack/acp/start/ale/doc/ale-haskell.txt +++ /dev/null @@ -1,154 +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. - -=============================================================================== -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. - -=============================================================================== -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. - -=============================================================================== -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'` - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-hcl.txt b/pack/acp/start/ale/doc/ale-hcl.txt deleted file mode 100644 index 59b0a9d..0000000 --- a/pack/acp/start/ale/doc/ale-hcl.txt +++ /dev/null @@ -1,11 +0,0 @@ -=============================================================================== -ALE HCL Integration *ale-hcl-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/pack/acp/start/ale/doc/ale-html.txt b/pack/acp/start/ale/doc/ale-html.txt deleted file mode 100644 index 5d6b20e..0000000 --- a/pack/acp/start/ale/doc/ale-html.txt +++ /dev/null @@ -1,130 +0,0 @@ -=============================================================================== -ALE HTML Integration *ale-html-options* - - -=============================================================================== -fecs *ale-html-fecs* - -`fecs` options for HTMl is the same as the options for JavaScript, -and both of them reads `./.fecsrc` as the default configuration file. -See: |ale-javascript-fecs|. - - -=============================================================================== -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| - - -=============================================================================== -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| - - -=============================================================================== -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| - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-idris.txt b/pack/acp/start/ale/doc/ale-idris.txt deleted file mode 100644 index c7500b0..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-ispc.txt b/pack/acp/start/ale/doc/ale-ispc.txt deleted file mode 100644 index bf30e8e..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-java.txt b/pack/acp/start/ale/doc/ale-java.txt deleted file mode 100644 index a563f1f..0000000 --- a/pack/acp/start/ale/doc/ale-java.txt +++ /dev/null @@ -1,206 +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|. - - -=============================================================================== -javac *ale-java-javac* - -g:ale_java_javac_classpath *g:ale_java_javac_classpath* - *b:ale_java_javac_classpath* - Type: |String| - 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. - - -=============================================================================== -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. -Simply download the source code and then build a distribution: - - scripts/link_mac.sh - -or - - scripts/link_windows.sh - -This generates a dist/mac or dist/windows directory that contains the -language server. 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 in this directory. - -g:ale_java_javalsp_executable *g:ale_java_javalsp_executable* - *b:ale_java_javalsp_executable* - Type: |String| - Default: `'launcher'` - -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/mac/bin/launcher -< - -=============================================================================== -eclipselsp *ale-java-eclipselsp* - -To enable Eclipse 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 8. JDK 9 or 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. - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-javascript.txt b/pack/acp/start/ale/doc/ale-javascript.txt deleted file mode 100644 index ea0a708..0000000 --- a/pack/acp/start/ale/doc/ale-javascript.txt +++ /dev/null @@ -1,336 +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"] -< - -=============================================================================== -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 behaviour, 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/pack/acp/start/ale/doc/ale-json.txt b/pack/acp/start/ale/doc/ale-json.txt deleted file mode 100644 index 96499a0..0000000 --- a/pack/acp/start/ale/doc/ale-json.txt +++ /dev/null @@ -1,105 +0,0 @@ -=============================================================================== -ALE JSON Integration *ale-json-options* - - -=============================================================================== -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. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-julia.txt b/pack/acp/start/ale/doc/ale-julia.txt deleted file mode 100644 index 5153241..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-kotlin.txt b/pack/acp/start/ale/doc/ale-kotlin.txt deleted file mode 100644 index 4028531..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-latex.txt b/pack/acp/start/ale/doc/ale-latex.txt deleted file mode 100644 index bedbabc..0000000 --- a/pack/acp/start/ale/doc/ale-latex.txt +++ /dev/null @@ -1,18 +0,0 @@ -=============================================================================== -ALE LaTeX Integration *ale-latex-options* - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-less.txt b/pack/acp/start/ale/doc/ale-less.txt deleted file mode 100644 index 040e511..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-llvm.txt b/pack/acp/start/ale/doc/ale-llvm.txt deleted file mode 100644 index 2f4a46b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-lua.txt b/pack/acp/start/ale/doc/ale-lua.txt deleted file mode 100644 index f1286f8..0000000 --- a/pack/acp/start/ale/doc/ale-lua.txt +++ /dev/null @@ -1,34 +0,0 @@ -=============================================================================== -ALE Lua Integration *ale-lua-options* - -=============================================================================== -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. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-markdown.txt b/pack/acp/start/ale/doc/ale-markdown.txt deleted file mode 100644 index 4e27eb9..0000000 --- a/pack/acp/start/ale/doc/ale-markdown.txt +++ /dev/null @@ -1,71 +0,0 @@ -=============================================================================== -ALE Markdown Integration *ale-markdown-options* - - -=============================================================================== -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. - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-mercury.txt b/pack/acp/start/ale/doc/ale-mercury.txt deleted file mode 100644 index ca06a0a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-nasm.txt b/pack/acp/start/ale/doc/ale-nasm.txt deleted file mode 100644 index 16c024a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-nroff.txt b/pack/acp/start/ale/doc/ale-nroff.txt deleted file mode 100644 index 62ec789..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-objc.txt b/pack/acp/start/ale/doc/ale-objc.txt deleted file mode 100644 index 0163175..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-objcpp.txt b/pack/acp/start/ale/doc/ale-objcpp.txt deleted file mode 100644 index cd65ab7..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-ocaml.txt b/pack/acp/start/ale/doc/ale-ocaml.txt deleted file mode 100644 index 8b644c1..0000000 --- a/pack/acp/start/ale/doc/ale-ocaml.txt +++ /dev/null @@ -1,82 +0,0 @@ -=============================================================================== -ALE OCaml Integration *ale-ocaml-options* - - -=============================================================================== -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). - -=============================================================================== -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/pack/acp/start/ale/doc/ale-pawn.txt b/pack/acp/start/ale/doc/ale-pawn.txt deleted file mode 100644 index f836df9..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-perl.txt b/pack/acp/start/ale/doc/ale-perl.txt deleted file mode 100644 index 761c273..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-perl6.txt b/pack/acp/start/ale/doc/ale-perl6.txt deleted file mode 100644 index 94953db..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-php.txt b/pack/acp/start/ale/doc/ale-php.txt deleted file mode 100644 index d41fb50..0000000 --- a/pack/acp/start/ale/doc/ale-php.txt +++ /dev/null @@ -1,227 +0,0 @@ -=============================================================================== -ALE PHP Integration *ale-php-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| - - -=============================================================================== -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 4 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, `'4'` 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. - - -=============================================================================== -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. - -=============================================================================== -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_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)` - - This variable force globally installed 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. - -=============================================================================== -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. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-po.txt b/pack/acp/start/ale/doc/ale-po.txt deleted file mode 100644 index 1e03b7b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-pod.txt b/pack/acp/start/ale/doc/ale-pod.txt deleted file mode 100644 index c7cc0bb..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-pony.txt b/pack/acp/start/ale/doc/ale-pony.txt deleted file mode 100644 index 3b32168..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-powershell.txt b/pack/acp/start/ale/doc/ale-powershell.txt deleted file mode 100644 index c28ef9e..0000000 --- a/pack/acp/start/ale/doc/ale-powershell.txt +++ /dev/null @@ -1,77 +0,0 @@ -=============================================================================== -ALE PowerShell Integration *ale-powershell-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. -Some PowerShell plugins set the filetype of files to `ps1`. To continue using -these plugins, use the ale_linter_aliases global to alias `ps1` to `powershell` - -> - " Allow ps1 filetype to work with powershell linters - let g:ale_linter_aliases = {'ps1': '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/pack/acp/start/ale/doc/ale-prolog.txt b/pack/acp/start/ale/doc/ale-prolog.txt deleted file mode 100644 index 14062a5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-proto.txt b/pack/acp/start/ale/doc/ale-proto.txt deleted file mode 100644 index 734e23d..0000000 --- a/pack/acp/start/ale/doc/ale-proto.txt +++ /dev/null @@ -1,33 +0,0 @@ -=============================================================================== -ALE Proto Integration *ale-proto-options* - - -=============================================================================== -Integration Information - -Linting of `.proto` files requires that the `protoc` binary is installed in the -system path and that the `protoc-gen-lint` plugin for the `protoc` binary is also -installed. - -To enable `.proto` file linting, update |g:ale_linters| as appropriate: -> - " Enable linter for .proto files - let g:ale_linters = {'proto': ['protoc-gen-lint']} -< -=============================================================================== -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. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-pug.txt b/pack/acp/start/ale/doc/ale-pug.txt deleted file mode 100644 index e2836f8..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-puppet.txt b/pack/acp/start/ale/doc/ale-puppet.txt deleted file mode 100644 index daa8c10..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-pyrex.txt b/pack/acp/start/ale/doc/ale-pyrex.txt deleted file mode 100644 index 245e611..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-python.txt b/pack/acp/start/ale/doc/ale-python.txt deleted file mode 100644 index 9d5846d..0000000 --- a/pack/acp/start/ale/doc/ale-python.txt +++ /dev/null @@ -1,764 +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. - -=============================================================================== -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 - mypy.ini - pycodestyle.cfg - .flake8 - .flake8rc - pylama.ini - pylintrc - .pylintrc - Pipfile - Pipfile.lock -< - -The first directory containing any of the files named above will be used. - - -=============================================================================== -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'`. - - -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. - - -=============================================================================== -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_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. - - -=============================================================================== -flake8 *ale-python-flake8* - -g:ale_python_flake8_change_directory *g:ale_python_flake8_change_directory* - *b:ale_python_flake8_change_directory* - Type: |Number| - Default: `1` - - If set to `1`, ALE will switch to the directory the Python file being - checked with `flake8` is in before checking it. This helps `flake8` find - configuration files more easily. This option can be turned off 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'`. - - -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. - - -=============================================================================== -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| - - -=============================================================================== -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_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'`. - -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_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| - - -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. - - -=============================================================================== -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'`. - - -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. - - -=============================================================================== -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'`. - - -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. - - -=============================================================================== -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'`. - - -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. - - -=============================================================================== -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'`. - - -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. - - -=============================================================================== -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'`. - - -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. - - -=============================================================================== -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'`. - - -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_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). - -=============================================================================== -pyls *ale-python-pyls* - -`pyls` will be run from a detected project root, per |ale-python-root|. - - -g:ale_python_pyls_executable *g:ale_python_pyls_executable* - *b:ale_python_pyls_executable* - Type: |String| - Default: `'pyls'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `pyls'`. - - -g:ale_python_pyls_use_global *g:ale_python_pyls_use_global* - *b:ale_python_pyls_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_pyls_auto_pipenv *g:ale_python_pyls_auto_pipenv* - *b:ale_python_pyls_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_pyls_config *g:ale_python_pyls_config* - *b:ale_python_pyls_config* - Type: |Dictionary| - Default: `{}` - - Dictionary with configuration settings for pyls. For example, to disable - the pycodestyle linter: > - { - \ 'pyls': { - \ 'plugins': { - \ 'pycodestyle': { - \ 'enabled': v:false - \ } - \ } - \ }, - \ } -< - -=============================================================================== -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'`. - - -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. - - -=============================================================================== -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| - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-qml.txt b/pack/acp/start/ale/doc/ale-qml.txt deleted file mode 100644 index f6d715a..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-r.txt b/pack/acp/start/ale/doc/ale-r.txt deleted file mode 100644 index b5ccebe..0000000 --- a/pack/acp/start/ale/doc/ale-r.txt +++ /dev/null @@ -1,45 +0,0 @@ -=============================================================================== -ALE R Integration *ale-r-options* - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-reasonml.txt b/pack/acp/start/ale/doc/ale-reasonml.txt deleted file mode 100644 index b8729a5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-restructuredtext.txt b/pack/acp/start/ale/doc/ale-restructuredtext.txt deleted file mode 100644 index e308b07..0000000 --- a/pack/acp/start/ale/doc/ale-restructuredtext.txt +++ /dev/null @@ -1,26 +0,0 @@ -=============================================================================== -ALE reStructuredText Integration *ale-restructuredtext-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/pack/acp/start/ale/doc/ale-ruby.txt b/pack/acp/start/ale/doc/ale-ruby.txt deleted file mode 100644 index bf971e7..0000000 --- a/pack/acp/start/ale/doc/ale-ruby.txt +++ /dev/null @@ -1,155 +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. - - -=============================================================================== -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 change to modify flags given to rubocop. - - -=============================================================================== -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. - - -=============================================================================== -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 change to modify flags given to standardrb. - - -=============================================================================== - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-rust.txt b/pack/acp/start/ale/doc/ale-rust.txt deleted file mode 100644 index 44a79b1..0000000 --- a/pack/acp/start/ale/doc/ale-rust.txt +++ /dev/null @@ -1,248 +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 three possible linters 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 contained in Cargo projects. - 4. rustfmt -- If you have `rustfmt` installed, you can use it as a fixer to - consistently reformat your Rust code. - - Only cargo is 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']} -< - - Also note that rustc 1.12. or later is needed. - - -=============================================================================== -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`). - - -=============================================================================== -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: `'-Z no-codegen'` - - The variable can be used to change the options passed to `rustc`. - - `-Z no-codegen` should only work with nightly builds of Rust. 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 repporting 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/pack/acp/start/ale/doc/ale-sass.txt b/pack/acp/start/ale/doc/ale-sass.txt deleted file mode 100644 index 22d7c47..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-scala.txt b/pack/acp/start/ale/doc/ale-scala.txt deleted file mode 100644 index ff43cd6..0000000 --- a/pack/acp/start/ale/doc/ale-scala.txt +++ /dev/null @@ -1,98 +0,0 @@ -=============================================================================== -ALE Scala Integration *ale-scala-options* - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-scss.txt b/pack/acp/start/ale/doc/ale-scss.txt deleted file mode 100644 index 07a94fe..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-sh.txt b/pack/acp/start/ale/doc/ale-sh.txt deleted file mode 100644 index 3eac903..0000000 --- a/pack/acp/start/ale/doc/ale-sh.txt +++ /dev/null @@ -1,115 +0,0 @@ -=============================================================================== -ALE Shell Integration *ale-sh-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/pack/acp/start/ale/doc/ale-sml.txt b/pack/acp/start/ale/doc/ale-sml.txt deleted file mode 100644 index cc8d679..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-solidity.txt b/pack/acp/start/ale/doc/ale-solidity.txt deleted file mode 100644 index 4b74a27..0000000 --- a/pack/acp/start/ale/doc/ale-solidity.txt +++ /dev/null @@ -1,24 +0,0 @@ -=============================================================================== -ALE Solidity Integration *ale-solidity-options* - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-spec.txt b/pack/acp/start/ale/doc/ale-spec.txt deleted file mode 100644 index 3da950c..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-sql.txt b/pack/acp/start/ale/doc/ale-sql.txt deleted file mode 100644 index f9bc6ac..0000000 --- a/pack/acp/start/ale/doc/ale-sql.txt +++ /dev/null @@ -1,43 +0,0 @@ -=============================================================================== -ALE SQL Integration *ale-sql-options* - - -=============================================================================== -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. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-stylus.txt b/pack/acp/start/ale/doc/ale-stylus.txt deleted file mode 100644 index 3e6ba90..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-sugarss.txt b/pack/acp/start/ale/doc/ale-sugarss.txt deleted file mode 100644 index 8e991e5..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-supported-languages-and-tools.txt b/pack/acp/start/ale/doc/ale-supported-languages-and-tools.txt deleted file mode 100644 index f1087c2..0000000 --- a/pack/acp/start/ale/doc/ale-supported-languages-and-tools.txt +++ /dev/null @@ -1,488 +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 - * `gcc` -* Ansible - * `ansible-lint` -* API Blueprint - * `drafter` -* AsciiDoc - * `alex`!! - * `proselint` - * `redpen` - * `textlint` - * `vale` - * `write-good` -* ASM - * `gcc` -* Awk - * `gawk` -* Bash - * `language-server` - * `shell` (-n flag) - * `shellcheck` - * `shfmt` -* BibTeX - * `bibclean` -* Bourne Shell - * `shell` (-n flag) - * `shellcheck` - * `shfmt` -* C - * `ccls` - * `clang` - * `clangd` - * `clang-format` - * `clangtidy`!! - * `cppcheck` - * `cpplint`!! - * `cquery` - * `flawfinder` - * `gcc` - * `uncrustify` -* C# - * `mcs` - * `mcsc`!! - * `uncrustify` -* C++ (filetype cpp) - * `ccls` - * `clang` - * `clangcheck`!! - * `clangd` - * `clang-format` - * `clangtidy`!! - * `clazy`!! - * `cppcheck` - * `cpplint`!! - * `cquery` - * `flawfinder` - * `gcc` - * `uncrustify` -* Chef - * `cookstyle` - * `foodcritic` -* Clojure - * `clj-kondo` - * `joker` -* CloudFormation - * `cfn-python-lint` -* CMake - * `cmake-format` - * `cmakelint` -* CoffeeScript - * `coffee` - * `coffeelint` -* Crystal - * `ameba`!! - * `crystal`!! -* CSS - * `csslint` - * `fecs` - * `prettier` - * `stylelint` -* Cucumber - * `cucumber` -* CUDA - * `nvcc`!! -* Cypher - * `cypher-lint` -* Cython (pyrex filetype) - * `cython` -* D - * `dls` - * `dmd` - * `uncrustify` -* Dafny - * `dafny`!! -* Dart - * `dartanalyzer`!! - * `dartfmt`!! - * `language_server` -* Dockerfile - * `dockerfile_lint` - * `hadolint` -* Elixir - * `credo` - * `dialyxir` - * `dogma` - * `elixir-ls` - * `mix`!! -* Elm - * `elm-format` - * `elm-lsp` - * `elm-make` -* Erb - * `erb` - * `erubi` - * `erubis` - * `ruumba` -* Erlang - * `erlc` - * `SyntaxErl` -* Fish - * `fish` (-n flag) -* Fortran - * `gcc` - * `language_server` -* Fountain - * `proselint` -* FusionScript - * `fusion-lint` -* Git Commit Messages - * `gitlint` -* GLSL - * glslang - * `glslls` -* Go - * `bingo` - * `go build`!! - * `gofmt` - * `goimports` - * `golangci-lint`!! - * `golangserver` - * `golint` - * `gometalinter`!! - * `go mod`!! - * `gopls` - * `gosimple`!! - * `gotype`!! - * `go vet`!! - * `staticcheck`!! -* GraphQL - * `eslint` - * `gqlint` - * `prettier` -* Hack - * `hack` - * `hackfmt` - * `hhast` -* Haml - * `haml-lint` -* Handlebars - * `ember-template-lint` -* Haskell - * `brittany` - * `cabal-ghc` - * `floskell` - * `ghc` - * `ghc-mod` - * `hdevtools` - * `hfmt` - * `hie` - * `hlint` - * `stack-build`!! - * `stack-ghc` - * `stylish-haskell` -* HCL - * `terraform-fmt` -* HTML - * `alex`!! - * `fecs` - * `HTMLHint` - * `prettier` - * `proselint` - * `tidy` - * `write-good` -* Idris - * `idris` -* ISPC - * `ispc`!! -* Java - * `checkstyle` - * `eclipselsp` - * `google-java-format` - * `javac` - * `javalsp` - * `PMD` - * `uncrustify` -* JavaScript - * `eslint` - * `fecs` - * `flow` - * `jscs` - * `jshint` - * `prettier` - * `prettier-eslint` - * `prettier-standard` - * `standard` - * `tsserver` - * `xo` -* JSON - * `fixjson` - * `jq` - * `jsonlint` - * `prettier` -* Julia - * `languageserver` -* Kotlin - * `kotlinc`!! - * `ktlint`!! - * `languageserver` -* LaTeX (tex) - * `alex`!! - * `chktex` - * `lacheck` - * `proselint` - * `redpen` - * `texlab` - * `textlint` - * `vale` - * `write-good` -* Less - * `lessc` - * `prettier` - * `stylelint` -* LLVM - * `llc` -* Lua - * `luac` - * `luacheck` -* Mail - * `alex`!! - * `languagetool`!! - * `proselint` - * `vale` -* Make - * `checkmake` -* Markdown - * `alex`!! - * `languagetool`!! - * `markdownlint`!! - * `mdl` - * `prettier` - * `proselint` - * `redpen` - * `remark-lint` - * `textlint` - * `vale` - * `write-good` -* MATLAB - * `mlint` -* Mercury - * `mmc`!! -* NASM - * `nasm`!! -* Nim - * `nim check`!! -* nix - * `nix-instantiate` -* nroff - * `alex`!! - * `proselint` - * `write-good` -* Objective-C - * `ccls` - * `clang` - * `clangd` - * `uncrustify` -* Objective-C++ - * `clang` - * `clangd` - * `uncrustify` -* OCaml - * `merlin` (see |ale-ocaml-merlin|) - * `ocamlformat` - * `ocp-indent` - * `ols` -* Pawn - * `uncrustify` -* Perl - * `perl -c` - * `perl-critic` - * `perltidy` -* Perl6 - * `perl6 -c` -* PHP - * `langserver` - * `phan` - * `phpcbf` - * `phpcs` - * `php-cs-fixer` - * `php -l` - * `phpmd` - * `phpstan` - * `psalm`!! -* PO - * `alex`!! - * `msgfmt` - * `proselint` - * `write-good` -* Pod - * `alex`!! - * `proselint` - * `write-good` -* Pony - * `ponyc` -* PowerShell - * `powershell` - * `psscriptanalyzer` -* Prolog - * `swipl` -* proto - * `protoc-gen-lint` -* Pug - * `pug-lint` -* Puppet - * `languageserver` - * `puppet` - * `puppet-lint` -* Python - * `autopep8` - * `bandit` - * `black` - * `flake8` - * `isort` - * `mypy` - * `prospector` - * `pycodestyle` - * `pydocstyle` - * `pyflakes` - * `pylama`!! - * `pylint`!! - * `pyls` - * `pyre` - * `reorder-python-imports` - * `vulture`!! - * `yapf` -* QML - * `qmlfmt` - * `qmllint` -* R - * `lintr` - * `styler` -* Racket - * `raco` -* ReasonML - * `merlin` - * `ols` - * `reason-language-server` - * `refmt` -* reStructuredText - * `alex`!! - * `proselint` - * `redpen` - * `rstcheck` - * `textlint` - * `vale` - * `write-good` -* Re:VIEW - * `redpen` -* RPM spec - * `rpmlint` -* Ruby - * `brakeman` - * `rails_best_practices`!! - * `reek` - * `rubocop` - * `ruby` - * `rufo` - * `solargraph` - * `standardrb` -* Rust - * `cargo`!! - * `rls` - * `rustc` (see |ale-integration-rust|) - * `rustfmt` -* Sass - * `sass-lint` - * `stylelint` -* Scala - * `fsc` - * `sbtserver` - * `scalac` - * `scalafmt` - * `scalastyle` -* SCSS - * `prettier` - * `sass-lint` - * `scss-lint` - * `stylelint` -* Slim - * `slim-lint` -* SML - * `smlnj` -* Solidity - * `solhint` - * `solium` -* SQL - * `pgformatter` - * `sqlfmt` - * `sqlint` -* Stylus - * `stylelint` -* SugarSS - * `stylelint` -* Swift - * `sourcekit-lsp` - * `swiftformat` - * `swiftlint` -* Tcl - * `nagelfar`!! -* Terraform - * `fmt` - * `tflint` -* Texinfo - * `alex`!! - * `proselint` - * `write-good` -* Text^ - * `alex`!! - * `languagetool`!! - * `proselint` - * `redpen` - * `textlint` - * `vale` - * `write-good` -* Thrift - * `thrift` -* TypeScript - * `eslint` - * `fecs` - * `prettier` - * `tslint` - * `tsserver` - * `typecheck` -* VALA - * `uncrustify` -* Verilog - * `iverilog` - * `verilator` - * `vlog` - * `xvlog` -* VHDL - * `ghdl` - * `vcom` - * `xvhdl` -* Vim - * `vint` -* Vim help^ - * `alex`!! - * `proselint` - * `write-good` -* Vue - * `prettier` - * `vls` -* XHTML - * `alex`!! - * `proselint` - * `write-good` -* XML - * `xmllint` -* YAML - * `prettier` - * `swaglint` - * `yamllint` -* YANG - * `yang-lsp` diff --git a/pack/acp/start/ale/doc/ale-swift.txt b/pack/acp/start/ale/doc/ale-swift.txt deleted file mode 100644 index 8fa0c06..0000000 --- a/pack/acp/start/ale/doc/ale-swift.txt +++ /dev/null @@ -1,21 +0,0 @@ -=============================================================================== -ALE Swift Integration *ale-swift-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/pack/acp/start/ale/doc/ale-tcl.txt b/pack/acp/start/ale/doc/ale-tcl.txt deleted file mode 100644 index 497c9fd..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-terraform.txt b/pack/acp/start/ale/doc/ale-terraform.txt deleted file mode 100644 index 387fd73..0000000 --- a/pack/acp/start/ale/doc/ale-terraform.txt +++ /dev/null @@ -1,59 +0,0 @@ -=============================================================================== -ALE Terraform Integration *ale-terraform-options* - - -=============================================================================== -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. - - -=============================================================================== -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. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: - diff --git a/pack/acp/start/ale/doc/ale-tex.txt b/pack/acp/start/ale/doc/ale-tex.txt deleted file mode 100644 index ceb9fa8..0000000 --- a/pack/acp/start/ale/doc/ale-tex.txt +++ /dev/null @@ -1,77 +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. - - ------------------------------------------------------------------------------- -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. - - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-texinfo.txt b/pack/acp/start/ale/doc/ale-texinfo.txt deleted file mode 100644 index f8ed342..0000000 --- a/pack/acp/start/ale/doc/ale-texinfo.txt +++ /dev/null @@ -1,12 +0,0 @@ -=============================================================================== -ALE Texinfo Integration *ale-texinfo-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/pack/acp/start/ale/doc/ale-text.txt b/pack/acp/start/ale/doc/ale-text.txt deleted file mode 100644 index 913d7e6..0000000 --- a/pack/acp/start/ale/doc/ale-text.txt +++ /dev/null @@ -1,42 +0,0 @@ -=============================================================================== -ALE Text Integration *ale-text-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/pack/acp/start/ale/doc/ale-thrift.txt b/pack/acp/start/ale/doc/ale-thrift.txt deleted file mode 100644 index bb2ec05..0000000 --- a/pack/acp/start/ale/doc/ale-thrift.txt +++ /dev/null @@ -1,46 +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. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-typescript.txt b/pack/acp/start/ale/doc/ale-typescript.txt deleted file mode 100644 index 7dc5982..0000000 --- a/pack/acp/start/ale/doc/ale-typescript.txt +++ /dev/null @@ -1,115 +0,0 @@ -=============================================================================== -ALE TypeScript Integration *ale-typescript-options* - - -=============================================================================== -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. - - -=============================================================================== -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. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-vala.txt b/pack/acp/start/ale/doc/ale-vala.txt deleted file mode 100644 index ca24bcf..0000000 --- a/pack/acp/start/ale/doc/ale-vala.txt +++ /dev/null @@ -1,12 +0,0 @@ -=============================================================================== -ALE VALA Integration *ale-vala-options* - - -=============================================================================== -uncrustify *ale-vala-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/pack/acp/start/ale/doc/ale-verilog.txt b/pack/acp/start/ale/doc/ale-verilog.txt deleted file mode 100644 index 94b820b..0000000 --- a/pack/acp/start/ale/doc/ale-verilog.txt +++ /dev/null @@ -1,102 +0,0 @@ -=============================================================================== -ALE Verilog/SystemVerilog Integration *ale-verilog-options* - - -=============================================================================== -ALE can use four different linters for Verilog HDL: - - iverilog: - Using `iverilog -t null -Wall` - - verilator - Using `verilator --lint-only -Wall` - - ModelSim/Questa - Using `vlog -quiet -lint` - - Vivado - Using `xvlog` - -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'],} -< - -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. - -=============================================================================== -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'. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-vhdl.txt b/pack/acp/start/ale/doc/ale-vhdl.txt deleted file mode 100644 index 3fea947..0000000 --- a/pack/acp/start/ale/doc/ale-vhdl.txt +++ /dev/null @@ -1,92 +0,0 @@ -=============================================================================== -ALE VHDL Integration *ale-vhdl-options* - - -=============================================================================== -ALE can use three different linters for VHDL: - - iverilog: - Using `iverilog -t null -Wall` - - ModelSim/Questa - Using `vcom -2008 -quiet -lint` - - Vivado - Using `xvhdl --2008` - -Note all 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. - -=============================================================================== -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'. - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-vim-help.txt b/pack/acp/start/ale/doc/ale-vim-help.txt deleted file mode 100644 index 3cbe20d..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-vim.txt b/pack/acp/start/ale/doc/ale-vim.txt deleted file mode 100644 index 772bad2..0000000 --- a/pack/acp/start/ale/doc/ale-vim.txt +++ /dev/null @@ -1,27 +0,0 @@ -=============================================================================== -ALE Vim Integration *ale-vim-options* - - -=============================================================================== -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/pack/acp/start/ale/doc/ale-vue.txt b/pack/acp/start/ale/doc/ale-vue.txt deleted file mode 100644 index a2c2786..0000000 --- a/pack/acp/start/ale/doc/ale-vue.txt +++ /dev/null @@ -1,31 +0,0 @@ -=============================================================================== -ALE Vue Integration *ale-vue-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| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-xhtml.txt b/pack/acp/start/ale/doc/ale-xhtml.txt deleted file mode 100644 index 3cc639e..0000000 --- a/pack/acp/start/ale/doc/ale-xhtml.txt +++ /dev/null @@ -1,12 +0,0 @@ -=============================================================================== -ALE XHTML Integration *ale-xhtml-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/pack/acp/start/ale/doc/ale-xml.txt b/pack/acp/start/ale/doc/ale-xml.txt deleted file mode 100644 index e43fdef..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale-yaml.txt b/pack/acp/start/ale/doc/ale-yaml.txt deleted file mode 100644 index c9a12ea..0000000 --- a/pack/acp/start/ale/doc/ale-yaml.txt +++ /dev/null @@ -1,92 +0,0 @@ -=============================================================================== -ALE YAML Integration *ale-yaml-options* - -=============================================================================== -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 -< - -=============================================================================== -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| - - -=============================================================================== -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. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/pack/acp/start/ale/doc/ale-yang.txt b/pack/acp/start/ale/doc/ale-yang.txt deleted file mode 100644 index ad61973..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/doc/ale.txt b/pack/acp/start/ale/doc/ale.txt deleted file mode 100644 index 6aa03a1..0000000 --- a/pack/acp/start/ale/doc/ale.txt +++ /dev/null @@ -1,3378 +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 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 Find References...................|ale-find-references| - 5.5 Hovering..........................|ale-hover| - 5.6 Symbol Search.....................|ale-symbol-search| - 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 languagetool..........|ale-languagetool-options| - 7.3 Options for write-good............|ale-write-good-options| - 7.4 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 behaviour 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| - - -------------------------------------------------------------------------------- -3.1 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. - -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(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. - - `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. - - `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 two arguments, - `(buffer, output)`, which can be used for converting - the output from a command into lines to replace the - buffer's contents with. - - A |List| of |String|s must be returned. - - `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|. - - -=============================================================================== -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 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 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 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-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 -< - -------------------------------------------------------------------------------- -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 following commands are supported: - -|ALEGoToDefinition| - Open the definition of the symbol under the cursor. -|ALEGoToDefinitionInTab| - The same, but for opening the file in a new tab. -|ALEGoToDefinitionInSplit| - The same, but in a new split. -|ALEGoToDefinitionInVSplit| - The same, but in a new vertical split. - -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 following commands are -supported: - -|ALEGoToTypeDefinition| - Open the definition of the symbol's type under - the cursor. -|ALEGoToTypeDefinitionInTab| - The same, but for opening the file in a new tab. -|ALEGoToTypeDefinitionInSplit| - The same, but in a new split. -|ALEGoToTypeDefinitionInVSplit| - The same, but in a new vertical split. - - -------------------------------------------------------------------------------- -5.4 Find References *ale-find-references* - -ALE supports finding references for symbols though any enabled LSP linters. -ALE will display a preview window showing the places where a symbol is -referenced in a codebase when a command is run. The following commands are -supported: - -|ALEFindReferences| - Find references for the word under the cursor. - -Options: - `-relative` Show file paths in the results relative to the working dir - -------------------------------------------------------------------------------- -5.5 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. - -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. - -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.6 Symbol Search *ale-symbol-search* - -ALE supports searching for workspace symbols via LSP linters. The following -commands are supported: - -|ALESymbolSearch| - Search for symbols in the workspace. - -Options: - `-relative` Show file paths in the results relative to the working dir - -=============================================================================== -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 *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. - - 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_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_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_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 *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_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_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 *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 *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_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_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* - - 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`. - - -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: `0` - - 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', - \ 'plaintex': 'tex', - \ 'rmarkdown': 'r', - \ 'systemverilog': 'verilog', - \ '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_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: > - - { - \ 'csh': ['shell'], - \ 'elixir': ['credo', 'dialyxir', 'dogma'], - \ 'go': ['gofmt', 'golint', 'go vet'], - \ 'hack': ['hack'], - \ 'help': [], - \ 'perl': ['perlcritic'], - \ 'perl6': [], - \ 'python': ['flake8', 'mypy', 'pylint'], - \ 'rust': ['cargo'], - \ 'spec': [], - \ 'text': [], - \ 'vue': ['eslint', 'vls'], - \ 'zsh': ['shell'], - \} -< - 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 *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_root *g:ale_lsp_root* -b:ale_lsp_root *b:ale_lsp_root* - - Type: |Dictionary| or |String| - Default: {} - - This option is used to determine the project root for the LSP 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, the linter is disabled. - -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 `'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_set_balloons *g:ale_set_balloons* - *b:ale_set_balloons* - - Type: |Number| - 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. - - 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. - - -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 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'` - - 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_shell *g: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* - - 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_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. - - 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 *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 *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 *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 *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|. - - -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|. - - -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|. - - -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|. - - -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|. - - -=============================================================================== -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 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. - - -------------------------------------------------------------------------------- -7.3. 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.4. 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| - gcc...................................|ale-ada-gcc| - ansible.................................|ale-ansible-options| - ansible-lint..........................|ale-ansible-ansible-lint| - asciidoc................................|ale-asciidoc-options| - write-good............................|ale-asciidoc-write-good| - textlint..............................|ale-asciidoc-textlint| - asm.....................................|ale-asm-options| - gcc...................................|ale-asm-gcc| - awk.....................................|ale-awk-options| - gawk..................................|ale-awk-gawk| - bib.....................................|ale-bib-options| - bibclean..............................|ale-bib-bibclean| - c.......................................|ale-c-options| - clang.................................|ale-c-clang| - clangd................................|ale-c-clangd| - clang-format..........................|ale-c-clangformat| - clangtidy.............................|ale-c-clangtidy| - cppcheck..............................|ale-c-cppcheck| - cquery................................|ale-c-cquery| - flawfinder............................|ale-c-flawfinder| - gcc...................................|ale-c-gcc| - uncrustify............................|ale-c-uncrustify| - ccls..................................|ale-c-ccls| - chef....................................|ale-chef-options| - 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-format..........................|ale-cmake-cmakeformat| - cpp.....................................|ale-cpp-options| - clang.................................|ale-cpp-clang| - clangd................................|ale-cpp-clangd| - clangcheck............................|ale-cpp-clangcheck| - clang-format..........................|ale-cpp-clangformat| - clangtidy.............................|ale-cpp-clangtidy| - clazy.................................|ale-cpp-clazy| - cppcheck..............................|ale-cpp-cppcheck| - cpplint...............................|ale-cpp-cpplint| - cquery................................|ale-cpp-cquery| - flawfinder............................|ale-cpp-flawfinder| - gcc...................................|ale-cpp-gcc| - uncrustify............................|ale-cpp-uncrustify| - ccls..................................|ale-cpp-ccls| - c#......................................|ale-cs-options| - mcs...................................|ale-cs-mcs| - mcsc..................................|ale-cs-mcsc| - uncrustify............................|ale-cs-uncrustify| - css.....................................|ale-css-options| - fecs..................................|ale-css-fecs| - prettier..............................|ale-css-prettier| - stylelint.............................|ale-css-stylelint| - cuda....................................|ale-cuda-options| - nvcc..................................|ale-cuda-nvcc| - clang-format..........................|ale-cuda-clangformat| - d.......................................|ale-d-options| - dls...................................|ale-d-dls| - uncrustify............................|ale-d-uncrustify| - dart....................................|ale-dart-options| - dartanalyzer..........................|ale-dart-dartanalyzer| - dartfmt...............................|ale-dart-dartfmt| - dockerfile..............................|ale-dockerfile-options| - dockerfile_lint.......................|ale-dockerfile-dockerfile_lint| - hadolint..............................|ale-dockerfile-hadolint| - elixir..................................|ale-elixir-options| - mix...................................|ale-elixir-mix| - mix_format............................|ale-elixir-mix-format| - dialyxir..............................|ale-elixir-dialyxir| - elixir-ls.............................|ale-elixir-elixir-ls| - credo.................................|ale-elixir-credo| - elm.....................................|ale-elm-options| - elm-format............................|ale-elm-elm-format| - elm-lsp...............................|ale-elm-elm-lsp| - elm-make..............................|ale-elm-elm-make| - erlang..................................|ale-erlang-options| - dialyzer..............................|ale-erlang-dialyzer| - erlc..................................|ale-erlang-erlc| - syntaxerl.............................|ale-erlang-syntaxerl| - eruby...................................|ale-eruby-options| - ruumba................................|ale-eruby-ruumba| - fish....................................|ale-fish-options| - fortran.................................|ale-fortran-options| - gcc...................................|ale-fortran-gcc| - language_server.......................|ale-fortran-language-server| - fountain................................|ale-fountain-options| - fusionscript............................|ale-fuse-options| - fusion-lint...........................|ale-fuse-fusionlint| - git commit..............................|ale-gitcommit-options| - gitlint...............................|ale-gitcommit-gitlint| - glsl....................................|ale-glsl-options| - glslang...............................|ale-glsl-glslang| - glslls................................|ale-glsl-glslls| - go......................................|ale-go-options| - bingo.................................|ale-go-bingo| - gobuild...............................|ale-go-gobuild| - gofmt.................................|ale-go-gofmt| - golangci-lint.........................|ale-go-golangci-lint| - golangserver..........................|ale-go-golangserver| - golint................................|ale-go-golint| - gometalinter..........................|ale-go-gometalinter| - gopls.................................|ale-go-gopls| - govet.................................|ale-go-govet| - 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| - ember-template-lint...................|ale-handlebars-embertemplatelint| - haskell.................................|ale-haskell-options| - brittany..............................|ale-haskell-brittany| - 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| - hlint.................................|ale-haskell-hlint| - stack-build...........................|ale-haskell-stack-build| - stack-ghc.............................|ale-haskell-stack-ghc| - stylish-haskell.......................|ale-haskell-stylish-haskell| - hie...................................|ale-haskell-hie| - hcl.....................................|ale-hcl-options| - terraform-fmt.........................|ale-hcl-terraform-fmt| - html....................................|ale-html-options| - fecs..................................|ale-html-fecs| - htmlhint..............................|ale-html-htmlhint| - tidy..................................|ale-html-tidy| - prettier..............................|ale-html-prettier| - stylelint.............................|ale-html-stylelint| - write-good............................|ale-html-write-good| - idris...................................|ale-idris-options| - idris.................................|ale-idris-idris| - ispc....................................|ale-ispc-options| - ispc..................................|ale-ispc-ispc| - java....................................|ale-java-options| - checkstyle............................|ale-java-checkstyle| - javac.................................|ale-java-javac| - google-java-format....................|ale-java-google-java-format| - pmd...................................|ale-java-pmd| - javalsp...............................|ale-java-javalsp| - eclipselsp............................|ale-java-eclipselsp| - uncrustify............................|ale-java-uncrustify| - javascript..............................|ale-javascript-options| - 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| - fixjson...............................|ale-json-fixjson| - jsonlint..............................|ale-json-jsonlint| - jq....................................|ale-json-jq| - prettier..............................|ale-json-prettier| - julia...................................|ale-julia-options| - languageserver........................|ale-julia-languageserver| - kotlin..................................|ale-kotlin-options| - kotlinc...............................|ale-kotlin-kotlinc| - ktlint................................|ale-kotlin-ktlint| - languageserver........................|ale-kotlin-languageserver| - latex...................................|ale-latex-options| - write-good............................|ale-latex-write-good| - textlint..............................|ale-latex-textlint| - less....................................|ale-less-options| - lessc.................................|ale-less-lessc| - prettier..............................|ale-less-prettier| - stylelint.............................|ale-less-stylelint| - llvm....................................|ale-llvm-options| - llc...................................|ale-llvm-llc| - lua.....................................|ale-lua-options| - luac..................................|ale-lua-luac| - luacheck..............................|ale-lua-luacheck| - markdown................................|ale-markdown-options| - mdl...................................|ale-markdown-mdl| - prettier..............................|ale-markdown-prettier| - remark-lint...........................|ale-markdown-remark-lint| - textlint..............................|ale-markdown-textlint| - write-good............................|ale-markdown-write-good| - mercury.................................|ale-mercury-options| - mmc...................................|ale-mercury-mmc| - nasm....................................|ale-nasm-options| - nasm..................................|ale-nasm-nasm| - nroff...................................|ale-nroff-options| - write-good............................|ale-nroff-write-good| - objc....................................|ale-objc-options| - clang.................................|ale-objc-clang| - clangd................................|ale-objc-clangd| - uncrustify............................|ale-objc-uncrustify| - ccls..................................|ale-objc-ccls| - objcpp..................................|ale-objcpp-options| - clang.................................|ale-objcpp-clang| - clangd................................|ale-objcpp-clangd| - uncrustify............................|ale-objcpp-uncrustify| - ocaml...................................|ale-ocaml-options| - merlin................................|ale-ocaml-merlin| - ols...................................|ale-ocaml-ols| - ocamlformat...........................|ale-ocaml-ocamlformat| - ocp-indent............................|ale-ocaml-ocp-indent| - pawn....................................|ale-pawn-options| - uncrustify............................|ale-pawn-uncrustify| - perl....................................|ale-perl-options| - perl..................................|ale-perl-perl| - perlcritic............................|ale-perl-perlcritic| - perltidy..............................|ale-perl-perltidy| - perl6...................................|ale-perl6-options| - perl6.................................|ale-perl6-perl6| - php.....................................|ale-php-options| - langserver............................|ale-php-langserver| - phan..................................|ale-php-phan| - phpcbf................................|ale-php-phpcbf| - phpcs.................................|ale-php-phpcs| - phpmd.................................|ale-php-phpmd| - phpstan...............................|ale-php-phpstan| - psalm.................................|ale-php-psalm| - php-cs-fixer..........................|ale-php-php-cs-fixer| - php...................................|ale-php-php| - po......................................|ale-po-options| - write-good............................|ale-po-write-good| - pod.....................................|ale-pod-options| - write-good............................|ale-pod-write-good| - pony....................................|ale-pony-options| - ponyc.................................|ale-pony-ponyc| - powershell............................|ale-powershell-options| - powershell..........................|ale-powershell-powershell| - psscriptanalyzer....................|ale-powershell-psscriptanalyzer| - prolog..................................|ale-prolog-options| - swipl.................................|ale-prolog-swipl| - proto...................................|ale-proto-options| - protoc-gen-lint.......................|ale-proto-protoc-gen-lint| - pug.....................................|ale-pug-options| - puglint...............................|ale-pug-puglint| - puppet..................................|ale-puppet-options| - puppet................................|ale-puppet-puppet| - puppetlint............................|ale-puppet-puppetlint| - puppet-languageserver.................|ale-puppet-languageserver| - pyrex (cython)..........................|ale-pyrex-options| - cython................................|ale-pyrex-cython| - python..................................|ale-python-options| - autopep8..............................|ale-python-autopep8| - bandit................................|ale-python-bandit| - black.................................|ale-python-black| - flake8................................|ale-python-flake8| - isort.................................|ale-python-isort| - mypy..................................|ale-python-mypy| - prospector............................|ale-python-prospector| - pycodestyle...........................|ale-python-pycodestyle| - pydocstyle............................|ale-python-pydocstyle| - pyflakes..............................|ale-python-pyflakes| - pylama................................|ale-python-pylama| - pylint................................|ale-python-pylint| - pyls..................................|ale-python-pyls| - pyre..................................|ale-python-pyre| - reorder-python-imports................|ale-python-reorder_python_imports| - vulture...............................|ale-python-vulture| - yapf..................................|ale-python-yapf| - qml.....................................|ale-qml-options| - qmlfmt................................|ale-qml-qmlfmt| - r.......................................|ale-r-options| - 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| - restructuredtext........................|ale-restructuredtext-options| - textlint..............................|ale-restructuredtext-textlint| - write-good............................|ale-restructuredtext-write-good| - ruby....................................|ale-ruby-options| - brakeman..............................|ale-ruby-brakeman| - rails_best_practices..................|ale-ruby-rails_best_practices| - reek..................................|ale-ruby-reek| - rubocop...............................|ale-ruby-rubocop| - ruby..................................|ale-ruby-ruby| - rufo..................................|ale-ruby-rufo| - solargraph............................|ale-ruby-solargraph| - standardrb............................|ale-ruby-standardrb| - rust....................................|ale-rust-options| - cargo.................................|ale-rust-cargo| - rls...................................|ale-rust-rls| - rustc.................................|ale-rust-rustc| - rustfmt...............................|ale-rust-rustfmt| - sass....................................|ale-sass-options| - sasslint..............................|ale-sass-sasslint| - stylelint.............................|ale-sass-stylelint| - scala...................................|ale-scala-options| - sbtserver.............................|ale-scala-sbtserver| - scalafmt..............................|ale-scala-scalafmt| - scalastyle............................|ale-scala-scalastyle| - scss....................................|ale-scss-options| - prettier..............................|ale-scss-prettier| - sasslint..............................|ale-scss-sasslint| - stylelint.............................|ale-scss-stylelint| - sh......................................|ale-sh-options| - sh-language-server....................|ale-sh-language-server| - shell.................................|ale-sh-shell| - shellcheck............................|ale-sh-shellcheck| - shfmt.................................|ale-sh-shfmt| - sml.....................................|ale-sml-options| - smlnj.................................|ale-sml-smlnj| - solidity................................|ale-solidity-options| - solhint...............................|ale-solidity-solhint| - solium................................|ale-solidity-solium| - spec....................................|ale-spec-options| - rpmlint...............................|ale-spec-rpmlint| - sql.....................................|ale-sql-options| - pgformatter...........................|ale-sql-pgformatter| - sqlfmt................................|ale-sql-sqlfmt| - stylus..................................|ale-stylus-options| - stylelint.............................|ale-stylus-stylelint| - sugarss.................................|ale-sugarss-options| - stylelint.............................|ale-sugarss-stylelint| - swift...................................|ale-swift-options| - sourcekitlsp..........................|ale-swift-sourcekitlsp| - tcl.....................................|ale-tcl-options| - nagelfar..............................|ale-tcl-nagelfar| - terraform...............................|ale-terraform-options| - terraform-fmt-fixer...................|ale-terraform-fmt-fixer| - terraform.............................|ale-terraform-terraform| - tflint................................|ale-terraform-tflint| - tex.....................................|ale-tex-options| - chktex................................|ale-tex-chktex| - lacheck...............................|ale-tex-lacheck| - latexindent...........................|ale-tex-latexindent| - texlab................................|ale-tex-texlab| - texinfo.................................|ale-texinfo-options| - write-good............................|ale-texinfo-write-good| - text....................................|ale-text-options| - textlint..............................|ale-text-textlint| - write-good............................|ale-text-write-good| - thrift..................................|ale-thrift-options| - thrift................................|ale-thrift-thrift| - typescript..............................|ale-typescript-options| - eslint................................|ale-typescript-eslint| - prettier..............................|ale-typescript-prettier| - tslint................................|ale-typescript-tslint| - tsserver..............................|ale-typescript-tsserver| - vala....................................|ale-vala-options| - uncrustify............................|ale-vala-uncrustify| - verilog/systemverilog...................|ale-verilog-options| - iverilog..............................|ale-verilog-iverilog| - verilator.............................|ale-verilog-verilator| - vlog..................................|ale-verilog-vlog| - xvlog.................................|ale-verilog-xvlog| - vhdl....................................|ale-vhdl-options| - ghdl..................................|ale-vhdl-ghdl| - vcom..................................|ale-vhdl-vcom| - xvhdl.................................|ale-vhdl-xvhdl| - vim.....................................|ale-vim-options| - vint..................................|ale-vim-vint| - vim help................................|ale-vim-help-options| - write-good............................|ale-vim-help-write-good| - vue.....................................|ale-vue-options| - prettier..............................|ale-vue-prettier| - vls...................................|ale-vue-vls| - xhtml...................................|ale-xhtml-options| - write-good............................|ale-xhtml-write-good| - xml.....................................|ale-xml-options| - xmllint...............................|ale-xml-xmllint| - yaml....................................|ale-yaml-options| - prettier..............................|ale-yaml-prettier| - swaglint..............................|ale-yaml-swaglint| - yamllint..............................|ale-yaml-yamllint| - yang....................................|ale-yang-options| - yang-lsp..............................|ale-yang-lsp| - - -=============================================================================== -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. - - 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. - -ALEFix *ALEFix* - - Fix problems with the current buffer. See |ale-fix| for more information. - - 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. - - 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|. - - A plug mapping `(ale_go_to_definition)` is defined for this command. - - -ALEGoToDefinitionInTab *ALEGoToDefinitionInTab* - - The same as |ALEGoToDefinition|, but opens results in a new tab. - - A plug mapping `(ale_go_to_definition_in_tab)` is defined for this - command. - - -ALEGoToDefinitionInSplit *ALEGoToDefinitionInSplit* - - The same as |ALEGoToDefinition|, but opens results in a new split. - - A plug mapping `(ale_go_to_definition_in_split)` is defined for this - command. - - -ALEGoToDefinitionInVSplit *ALEGoToDefinitionInVSplit* - - The same as |ALEGoToDefinition|, but opens results in a new vertical split. - - A plug mapping `(ale_go_to_definition_in_vsplit)` is defined for this - command. - - -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. - - 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|. - - A plug mapping `(ale_go_to_type_definition)` is defined for this - command. - - -ALEGoToTypeDefinitionInTab *ALEGoToTypeDefinitionInTab* - - The same as |ALEGoToTypeDefinition|, but opens results in a new tab. - - A plug mapping `(ale_go_to_type_definition_in_tab)` is defined for - this command. - - -ALEGoToTypeDefinitionInSplit *ALEGoToTypeDefinitionInSplit* - - The same as |ALEGoToTypeDefinition|, but opens results in a new split. - - A plug mapping `(ale_go_to_type_definition_in_split)` is defined for - this command. - - -ALEGoToTypeDefinitionInVSplit *ALEGoToTypeDefinitionInVSplit* - - The same as |ALEGoToTypeDefinition|, but opens results in a new vertical - split. - - A plug mapping `(ale_go_to_type_definition_in_vsplit)` is defined for - this command. - - -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. - - -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. - - *: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 set to `1`, or in - other words linters which check the file instead of the Vim buffer. - - A plug mapping `(ale_lint)` is defined for this command. - - -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 - behaviour : - `-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#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 is set to `1` will be - run. Linters with `lint_file` set to `1` are not run by default. - - 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. - - `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. - - -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`. - - -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()|. - - This command will be fed the lines from the buffer to - check, and will produce the lines of output given to - the `callback`. - - `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. - - *ale-lint-file* - `lint_file` A |Number| (`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. - - Linters set with this option 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 with this option - set to `1` will also be run when linters are run - manually, per |ALELintPost-autocmd|. - - When this option is set to `1`, `read_buffer` will - be set automatically to `0`. The two options cannot - be used together. - - *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 - 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|. - - 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 behaviour 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. - - 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* - *ale-linter-loading-behaviour* - - 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; - `methdod` - 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. - - -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. - - -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/w0rp/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/pack/acp/start/ale/ftplugin/ale-fix-suggest.vim b/pack/acp/start/ale/ftplugin/ale-fix-suggest.vim deleted file mode 100644 index 189a4dc..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/ftplugin/ale-preview-selection.vim b/pack/acp/start/ale/ftplugin/ale-preview-selection.vim deleted file mode 100644 index d77b4f9..0000000 --- a/pack/acp/start/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#OpenSelectionInBuffer() -noremap t :call ale#preview#OpenSelectionInTab() diff --git a/pack/acp/start/ale/ftplugin/ale-preview.vim b/pack/acp/start/ale/ftplugin/ale-preview.vim deleted file mode 100644 index ffbffbd..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/plugin/ale.vim b/pack/acp/start/ale/plugin/ale.vim deleted file mode 100644 index 7edf9a5..0000000 --- a/pack/acp/start/ale/plugin/ale.vim +++ /dev/null @@ -1,274 +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 - execute 'echoerr ''ALE requires NeoVim >= 0.2.0 or Vim 8 with +timers +job +channel''' - execute '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) - -" This Dictionary configures the default LSP roots for various linters. -let g:ale_lsp_root = get(g:, 'ale_lsp_root', {}) - -" 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) - -" 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 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 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')) - -" 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) - -if g:ale_set_balloons - call ale#balloon#Enable() -endif - -if g:ale_completion_enabled - call ale#completion#Enable() -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') - -" 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 -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 ALEGoToDefinition :call ale#definition#GoTo({}) -command! -bar ALEGoToDefinitionInTab :call ale#definition#GoTo({'open_in': 'tab'}) -command! -bar ALEGoToDefinitionInSplit :call ale#definition#GoTo({'open_in': 'horizontal-split'}) -command! -bar ALEGoToDefinitionInVSplit :call ale#definition#GoTo({'open_in': 'vertical-split'}) - -" Go to type definition for tsserver and LSP -command! -bar ALEGoToTypeDefinition :call ale#definition#GoToType({}) -command! -bar ALEGoToTypeDefinitionInTab :call ale#definition#GoToType({'open_in': 'tab'}) -command! -bar ALEGoToTypeDefinitionInSplit :call ale#definition#GoToType({'open_in': 'horizontal-split'}) -command! -bar ALEGoToTypeDefinitionInVSplit :call ale#definition#GoToType({'open_in': 'vertical-split'}) - -" 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() - -command! -bar ALEComplete :call ale#completion#GetCompletions('ale-manual') - -" 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) :ALEGoToDefinitionInTab -nnoremap (ale_go_to_definition_in_split) :ALEGoToDefinitionInSplit -nnoremap (ale_go_to_definition_in_vsplit) :ALEGoToDefinitionInVSplit -nnoremap (ale_go_to_type_definition) :ALEGoToTypeDefinition -nnoremap (ale_go_to_type_definition_in_tab) :ALEGoToTypeDefinitionInTab -nnoremap (ale_go_to_type_definition_in_split) :ALEGoToTypeDefinitionInSplit -nnoremap (ale_go_to_type_definition_in_vsplit) :ALEGoToTypeDefinitionInVSplit -nnoremap (ale_find_references) :ALEFindReferences -nnoremap (ale_hover) :ALEHover -nnoremap (ale_documentation) :ALEDocumentation -inoremap (ale_complete) :ALEComplete - -" 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/pack/acp/start/ale/rplugin/python3/deoplete/sources/ale.py b/pack/acp/start/ale/rplugin/python3/deoplete/sources/ale.py deleted file mode 100644 index 7ed2f6c..0000000 --- a/pack/acp/start/ale/rplugin/python3/deoplete/sources/ale.py +++ /dev/null @@ -1,54 +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 = 100 - self.is_bytepos = True - self.min_pattern_length = 1 - - # Returns an integer for the start position, as with omnifunc. - def get_completion_position(self): - return self.vim.call('ale#completion#GetCompletionPosition') - - 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 - - if context.get('is_refresh'): - context['is_async'] = False - - if context['is_async']: - # Result is the same as for omnifunc, or None. - result = self.vim.call('ale#completion#GetCompletionResult') - - if result is not None: - context['is_async'] = False - - return result - else: - context['is_async'] = True - - # Request some completion results. - self.vim.call('ale#completion#GetCompletions', 'deoplete') - - return [] diff --git a/pack/acp/start/ale/supported-tools.md b/pack/acp/start/ale/supported-tools.md deleted file mode 100644 index 8af79f7..0000000 --- a/pack/acp/start/ale/supported-tools.md +++ /dev/null @@ -1,497 +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: | Only checked when saved to disk | -| :warning: | Disabled by default | - ---- - -* Ada - * [gcc](https://gcc.gnu.org) -* Ansible - * [ansible-lint](https://github.com/willthames/ansible-lint) -* API Blueprint - * [drafter](https://github.com/apiaryio/drafter) -* AsciiDoc - * [alex](https://github.com/wooorm/alex) :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) -* Awk - * [gawk](https://www.gnu.org/software/gawk/) -* Bash - * [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) -* BibTeX - * [bibclean](http://ftp.math.utah.edu/pub/bibclean/) -* Bourne Shell - * shell [-n flag](http://linux.die.net/man/1/sh) - * [shellcheck](https://www.shellcheck.net/) - * [shfmt](https://github.com/mvdan/sh) -* C - * [ccls](https://github.com/MaskRay/ccls) - * [clang](http://clang.llvm.org/) - * [clangd](https://clang.llvm.org/extra/clangd.html) - * [clang-format](https://clang.llvm.org/docs/ClangFormat.html) - * [clangtidy](http://clang.llvm.org/extra/clang-tidy/) :floppy_disk: - * [cppcheck](http://cppcheck.sourceforge.net) - * [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint) - * [cquery](https://github.com/cquery-project/cquery) - * [flawfinder](https://www.dwheeler.com/flawfinder/) - * [gcc](https://gcc.gnu.org/) - * [uncrustify](https://github.com/uncrustify/uncrustify) -* C# - * [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) - * [ccls](https://github.com/MaskRay/ccls) - * [clang](http://clang.llvm.org/) - * [clangcheck](http://clang.llvm.org/docs/ClangCheck.html) :floppy_disk: - * [clangd](https://clang.llvm.org/extra/clangd.html) - * [clang-format](https://clang.llvm.org/docs/ClangFormat.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) - * [flawfinder](https://www.dwheeler.com/flawfinder/) - * [gcc](https://gcc.gnu.org/) - * [uncrustify](https://github.com/uncrustify/uncrustify) -* Chef - * [cookstyle](https://docs.chef.io/cookstyle.html) - * [foodcritic](http://www.foodcritic.io/) -* 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) - * [cmakelint](https://github.com/richq/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 - * [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 - * [nvcc](http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html) -* Cypher - * [cypher-lint](https://github.com/cleishm/libcypher-parser) -* Cython (pyrex filetype) - * [cython](http://cython.org/) -* D - * [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 - * [dartanalyzer](https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_cli) :floppy_disk: - * [dartfmt](https://github.com/dart-lang/sdk/tree/master/utils/dartfmt) - * [language_server](https://github.com/natebosch/dart_language_server) -* Dockerfile - * [dockerfile_lint](https://github.com/projectatomic/dockerfile_lint) - * [hadolint](https://github.com/hadolint/hadolint) -* Elixir - * [credo](https://github.com/rrrene/credo) - * [dialyxir](https://github.com/jeremyjh/dialyxir) - * [dogma](https://github.com/lpil/dogma) - * [elixir-ls](https://github.com/JakeBecker/elixir-ls) :warning: - * [mix](https://hexdocs.pm/mix/Mix.html) :warning: :floppy_disk: -* Elm - * [elm-format](https://github.com/avh4/elm-format) - * [elm-lsp](https://github.com/antew/elm-lsp) - * [elm-make](https://github.com/elm-lang/elm-make) -* Erb - * [erb](https://apidock.com/ruby/ERB) - * [erubi](https://github.com/jeremyevans/erubi) - * [erubis](https://github.com/kwatch/erubis) - * [ruumba](https://github.com/ericqweinstein/ruumba) -* Erlang - * [erlc](http://erlang.org/doc/man/erlc.html) - * [SyntaxErl](https://github.com/ten0s/syntaxerl) -* Fish - * fish [-n flag](https://linux.die.net/man/1/fish) -* 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: - * [go build](https://golang.org/cmd/go/) :warning: :floppy_disk: - * [gofmt](https://golang.org/cmd/gofmt/) - * [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: - * [golint](https://godoc.org/github.com/golang/lint) - * [gometalinter](https://github.com/alecthomas/gometalinter) :warning: :floppy_disk: - * [go mod](https://golang.org/cmd/go/) :warning: :floppy_disk: - * [gopls](https://github.com/golang/go/wiki/gopls) :warning: - * [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: - * [go vet](https://golang.org/cmd/vet/) :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/) - * [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) - * [hlint](https://hackage.haskell.org/package/hlint) - * [stack-build](https://haskellstack.org/) :floppy_disk: - * [stack-ghc](https://haskellstack.org/) - * [stylish-haskell](https://github.com/jaspervdj/stylish-haskell) -* HCL - * [terraform-fmt](https://github.com/hashicorp/terraform) -* HTML - * [alex](https://github.com/wooorm/alex) :floppy_disk: - * [fecs](http://fecs.baidu.com/) - * [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/) -* ISPC - * [ispc](https://ispc.github.io/) :floppy_disk: -* Java - * [checkstyle](http://checkstyle.sourceforge.net) - * [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) - * [PMD](https://pmd.github.io/) - * [uncrustify](https://github.com/uncrustify/uncrustify) -* JavaScript - * [eslint](http://eslint.org/) - * [fecs](http://fecs.baidu.com/) - * [flow](https://flowtype.org/) - * [jscs](http://jscs.info/) - * [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 - * [fixjson](https://github.com/rhysd/fixjson) - * [jq](https://stedolan.github.io/jq/) - * [jsonlint](http://zaa.ch/jsonlint/) - * [prettier](https://github.com/prettier/prettier) -* Julia - * [languageserver](https://github.com/JuliaEditorSupport/LanguageServer.jl) -* Kotlin - * [kotlinc](https://kotlinlang.org) :floppy_disk: - * [ktlint](https://ktlint.github.io) :floppy_disk: - * [languageserver](https://github.com/fwcd/KotlinLanguageServer) see `:help ale-integration-kotlin` for configuration instructions -* LaTeX - * [alex](https://github.com/wooorm/alex) :floppy_disk: - * [chktex](http://www.nongnu.org/chktex/) - * [lacheck](https://www.ctan.org/pkg/lacheck) - * [proselint](http://proselint.com/) - * [redpen](http://redpen.cc/) - * [texlab](https://texlab.netlify.com) ([Rust rewrite](https://github.com/latex-lsp/texlab/tree/rust)) - * [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 - * [luac](https://www.lua.org/manual/5.1/luac.html) - * [luacheck](https://github.com/mpeterv/luacheck) -* Mail - * [alex](https://github.com/wooorm/alex) :floppy_disk: - * [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/wooorm/alex) :floppy_disk: - * [languagetool](https://languagetool.org/) :floppy_disk: - * [markdownlint](https://github.com/DavidAnson/markdownlint) :floppy_disk: - * [mdl](https://github.com/mivok/markdownlint) - * [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: -* nix - * [nix-instantiate](http://nixos.org/nix/manual/#sec-nix-instantiate) -* nroff - * [alex](https://github.com/wooorm/alex) :floppy_disk: - * [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 - * [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-ocaml-merlin` for configuration instructions - * [ocamlformat](https://github.com/ocaml-ppx/ocamlformat) - * [ocp-indent](https://github.com/OCamlPro/ocp-indent) - * [ols](https://github.com/freebroccolo/ocaml-language-server) -* 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 - * [langserver](https://github.com/felixfbecker/php-language-server) - * [phan](https://github.com/phan/phan) see `:help ale-php-phan` to instructions - * [phpcbf](https://github.com/squizlabs/PHP_CodeSniffer) - * [phpcs](https://github.com/squizlabs/PHP_CodeSniffer) - * [php-cs-fixer](http://cs.sensiolabs.org/) - * [php -l](https://secure.php.net/) - * [phpmd](https://phpmd.org) - * [phpstan](https://github.com/phpstan/phpstan) - * [psalm](https://getpsalm.org) :floppy_disk: -* PO - * [alex](https://github.com/wooorm/alex) :floppy_disk: - * [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/wooorm/alex) :floppy_disk: - * [proselint](http://proselint.com/) - * [write-good](https://github.com/btford/write-good) -* Pony - * [ponyc](https://github.com/ponylang/ponyc) -* PowerShell - * [powershell](https://github.com/PowerShell/PowerShell) :floppy_disk - * [psscriptanalyzer](https://github.com/PowerShell/PSScriptAnalyzer) :floppy_disk -* Prolog - * [swipl](https://github.com/SWI-Prolog/swipl-devel) -* proto - * [protoc-gen-lint](https://github.com/ckaznocha/protoc-gen-lint) -* 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) -* Python - * [autopep8](https://github.com/hhatto/autopep8) - * [bandit](https://github.com/PyCQA/bandit) :warning: - * [black](https://github.com/ambv/black) - * [flake8](http://flake8.pycqa.org/en/latest/) - * [isort](https://github.com/timothycrosley/isort) - * [mypy](http://mypy-lang.org/) - * [prospector](https://github.com/PyCQA/prospector) :warning: - * [pycodestyle](https://github.com/PyCQA/pycodestyle) :warning: - * [pydocstyle](https://www.pydocstyle.org/) :warning: - * [pyflakes](https://github.com/PyCQA/pyflakes) - * [pylama](https://github.com/klen/pylama) :floppy_disk: - * [pylint](https://www.pylint.org/) :floppy_disk: - * [pyls](https://github.com/palantir/python-language-server) :warning: - * [pyre](https://github.com/facebook/pyre-check) :warning: - * [reorder-python-imports](https://github.com/asottile/reorder_python_imports) - * [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 - * [lintr](https://github.com/jimhester/lintr) - * [styler](https://github.com/r-lib/styler) -* Racket - * [raco](https://docs.racket-lang.org/raco/) -* 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) -* reStructuredText - * [alex](https://github.com/wooorm/alex) :floppy_disk: - * [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) -* Re:VIEW - * [redpen](http://redpen.cc/) -* RPM spec - * [rpmlint](https://github.com/rpm-software-management/rpmlint) :warning: (see `:help ale-integration-spec`) -* Ruby - * [brakeman](http://brakemanscanner.org/) :floppy_disk: - * [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) - * [standardrb](https://github.com/testdouble/standard) -* Rust - * [cargo](https://github.com/rust-lang/cargo) :floppy_disk: (see `:help ale-integration-rust` for configuration instructions) - * [rls](https://github.com/rust-lang-nursery/rls) :warning: - * [rustc](https://www.rust-lang.org/) :warning: - * [rustfmt](https://github.com/rust-lang-nursery/rustfmt) -* Sass - * [sass-lint](https://www.npmjs.com/package/sass-lint) - * [stylelint](https://github.com/stylelint/stylelint) -* Scala - * [fsc](https://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/tools/fsc.html) - * [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 - * [solhint](https://github.com/protofire/solhint) - * [solium](https://github.com/duaraghav8/Solium) -* SQL - * [pgformatter](https://github.com/darold/pgFormatter) - * [sqlfmt](https://github.com/jackc/sqlfmt) - * [sqlint](https://github.com/purcell/sqlint) -* Stylus - * [stylelint](https://github.com/stylelint/stylelint) -* SugarSS - * [stylelint](https://github.com/stylelint/stylelint) -* Swift - * [sourcekit-lsp](https://github.com/apple/sourcekit-lsp) - * [swiftformat](https://github.com/nicklockwood/SwiftFormat) - * [swiftlint](https://github.com/realm/SwiftLint) -* Tcl - * [nagelfar](http://nagelfar.sourceforge.net) :floppy_disk: -* Terraform - * [fmt](https://github.com/hashicorp/terraform) - * [tflint](https://github.com/wata727/tflint) -* Texinfo - * [alex](https://github.com/wooorm/alex) :floppy_disk: - * [proselint](http://proselint.com/) - * [write-good](https://github.com/btford/write-good) -* Text - * [alex](https://github.com/wooorm/alex) :warning: :floppy_disk: - * [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/) -* TypeScript - * [eslint](http://eslint.org/) - * [fecs](http://fecs.baidu.com/) - * [prettier](https://github.com/prettier/prettier) - * [tslint](https://github.com/palantir/tslint) - * [tsserver](https://github.com/Microsoft/TypeScript/wiki/Standalone-Server-%28tsserver%29) - * typecheck -* VALA - * [uncrustify](https://github.com/uncrustify/uncrustify) -* Verilog - * [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) -* 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 - * [vint](https://github.com/Kuniwak/vint) -* Vim help - * [alex](https://github.com/wooorm/alex) :warning: :floppy_disk: - * [proselint](http://proselint.com/) :warning: - * [write-good](https://github.com/btford/write-good) :warning: -* Vue - * [prettier](https://github.com/prettier/prettier) - * [vls](https://github.com/vuejs/vetur/tree/master/server) -* XHTML - * [alex](https://github.com/wooorm/alex) :floppy_disk: - * [proselint](http://proselint.com/) - * [write-good](https://github.com/btford/write-good) -* XML - * [xmllint](http://xmlsoft.org/xmllint.html) -* YAML - * [prettier](https://github.com/prettier/prettier) - * [swaglint](https://github.com/byCedric/swaglint) - * [yamllint](https://yamllint.readthedocs.io/) -* YANG - * [yang-lsp](https://github.com/theia-ide/yang-lsp) diff --git a/pack/acp/start/ale/syntax/ale-fix-suggest.vim b/pack/acp/start/ale/syntax/ale-fix-suggest.vim deleted file mode 100644 index b112f5b..0000000 --- a/pack/acp/start/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/pack/acp/start/ale/syntax/ale-preview-selection.vim b/pack/acp/start/ale/syntax/ale-preview-selection.vim deleted file mode 100644 index 879ba09..0000000 --- a/pack/acp/start/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/pack/acp/start/vimoutliner/.gitignore b/pack/acp/start/vimoutliner/.gitignore deleted file mode 100644 index fdc5844..0000000 --- a/pack/acp/start/vimoutliner/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -# Vim -*.sw? -*.un? -tags - -# archives -*.zip -*.gz -*.gzip - -# osx noise -.DS_Store - -# Python -*.pyc -*~ diff --git a/pack/acp/start/vimoutliner/CHANGELOG b/pack/acp/start/vimoutliner/CHANGELOG deleted file mode 100644 index 3b52f7d..0000000 --- a/pack/acp/start/vimoutliner/CHANGELOG +++ /dev/null @@ -1,1556 +0,0 @@ -CHANGELOG - - -Version 0.4.0 -Updated 2014-10-19 - * Additions/Changes: - - Added a list-based tags feature similar to org-mode - - Complete rewrite of the outline math plugin. - - Added colorscheme option to vimoutlinerrc and directory - - Modified to install.sh to: 1. Turn off backup functionality. - 2. Remove old backup clutter. 3. Remove old vo_base.vim files from - syntax, ftdetect and ftpluginAdd VimOutliner icons to the repository. - - Updated TODO.otl - - Move README.detailed to doc/votl.txt to make Pathogen working. - - Added information on pathogen installation to INSTALL file. - - Added syntax conceal for math equations. Concealed equations appear - as µ - - Add VimOutliner icons to the repository - - Add votl_maketags manpage - * Bug fixes: - - Small corrections and updates - - Removed unnecessary reserved mappings - - doc/votl_readme.txt is just a copy of old votl.txt, removed it. - - Fix for user-defined for command mappings. - - Moved loading of .vimoutlinerrc to before key mappings, other fixes - - Update in install.sh so that it installs vimoutlinerrc correctly. - - Correct votl_cheatsheet so that it is installed with helptags. - - Gramatical and stylistic corrections. - - Remove all remainders of localleader munging. - - Removed vimball install instructions from INSTALL and README files. - - Fix Help links - - Fix FSF address - - -Version 0.3.7 -Released 2014-04-05 - * Additions/Changes: - - Added new hoisting plugin. - - Added new tags plugin. - - Add weighted checkboxes. - - Now checkboxes calculations will ignore dash ([-]) marked items. - - Added new math plugin. - - Merged new clock plugin. - - Added new format plugin. - - Added new gtd plugin. - - Added updated smart_paste plugin. - - Added otl2latex script with files. - - New file type naming convention: vo_base to votl. - - Color fixes and updates. - - Updated vimoutlinerrc with more options for new plugins. - - Moved previous hoist plugin to prev directory, - - Made new TODO list - - Uploaded MediaWiki2otl script. - - Updated documentation. - * Bug fixes: - - Stop setting global options. - - Fixed checkboxes calculation to make it faster and more consistent. - - Strtime fix in vo_base.vim - - Corrections to READNE.detailed, readme, INSTALL and cheatsheet files. - - Corrections to install.sh. - - Replaced len() so it works with multibyte chars. - -Version 0.3.6 -Released 2011-05-09 - * Additions/Changes: - - Added updated comments and information to the user in the INSTALL - file. - - Added comments and information to the user in install.sh to align - with the new version. - - Added new light version of README and moved the more extensive file - to README.detailed - - Several updates and additions to the README, README.detailed and - doc/vo_readme.txt file. - * Bug fixes: - - Source only the first vimoutlinerrc found. - - Do not echo mappings. - - Fixed typo and updated reference in install.sh. - - Fixed several typos and updated reference in the - ftplugin/vo_base.vim - - Fixed typos and removed outdated references in the vo_hoist.otl and - vo_hoist.vim files. - - Fixed typos and removed outdated references in the vo_checkbox.otl - file. - - Fixed two mappings for sourcing rc file and writing file in - ftplugin/vo_base.vim. - - Fixed typos in colors/vo_base.vim - - Fixed errors when g:vo_modules_load is not defined, also updated the - plugin loading process to use lists. - -Version 0.3.5 -Released 2011-03-20 - * Additions/Changes: - - Moved all files inside $HOME/.vim. - - Added a cheat sheet to the documentation. - - Added smart-paste plugin. - - Added and updated post-processor scripts: - · fs2otl - · Node.pm - · otl2aft.awk - · otl2docbook.pl - · otl2html.py - · otl2lyx.awk - · otl2ooimpress.py - · otl2table.py - · otl2tags.py - · otlgrep.py - · otlhead.sh - · otlsplit.py - · otltail.sh - · otl_handler - · outline_calendar - · outline_freemind - · vo_maketags.pl - - Added syntax support for _ilink_. - - Hoist plugin disabled by default. - - Layout of vo_readme.txt made more similar to Vim help. - * Bug fixes: - - ,,S did not work. Fixed - -Version 0.3.4 -Released - * Additions/changes: - - added ,,cp as an alias to ,,c% - - Color schemes have been added - - Checkboxes and hoisting default to 'on' - - Modified ,,cb and ,,c% (and ,,cp) to work only on headings - - Fixed the ,,cz command to make the correct call - - Added descriptions of VO objects to help (headings, text, tables, - etc.) - * Bug fixes: - - W18 errors have been fixed - -============================================================================= -RCS file: /root/VimOutliner/VimOutliner/INSTALL,v -Working file: INSTALL -head: 1.2 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 2; selected revisions: 2 -description: ----------------------------- -revision 1.2 -date: 2004-11-27 19:30:43 +0000; author: noel; state: Exp; lines: +2 -2 - -Minor syntax and installation adjustments. -Change to vo_checkbox to fix a typo. ----------------------------- -revision 1.1 -date: 2004-02-17 22:00:15 +0000; author: noel; state: Exp; -These files are only in cvs for backup purposes. They should be extracted -from vo_readme.txt and never edited themselves: - INSTALL - LICENSE - VERSION -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/Attic/INSTALL.TXT,v -Working file: INSTALL.TXT -head: 1.3 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 3; selected revisions: 3 -description: -Quick installation instructions for developers. ----------------------------- -revision 1.3 -date: 2003-06-20 14:13:15 +0000; author: noel; state: dead; lines: +0 -0 -Final documentation tweaks for the final 0.3.0 release. ----------------------------- -revision 1.2 -date: 2003-06-18 13:50:55 +0000; author: noel; state: Exp; lines: +1 -1 -Modified the installation title. ----------------------------- -revision 1.1 -date: 2003-03-20 22:56:49 +0000; author: noel; state: Exp; -Initial revision -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/LICENSE,v -Working file: LICENSE -head: 1.2 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 2; selected revisions: 2 -description: ----------------------------- -revision 1.2 -date: 2004-11-27 19:30:43 +0000; author: noel; state: Exp; lines: +4 -2 - -Minor syntax and installation adjustments. -Change to vo_checkbox to fix a typo. ----------------------------- -revision 1.1 -date: 2004-02-17 22:00:15 +0000; author: noel; state: Exp; -These files are only in cvs for backup purposes. They should be extracted -from vo_readme.txt and never edited themselves: - INSTALL - LICENSE - VERSION -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/VERSION,v -Working file: VERSION -head: 1.4 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 4; selected revisions: 4 -description: ----------------------------- -revision 1.4 -date: 2005-06-07 17:48:50 +0000; author: noel; state: Exp; lines: +4 -0 -Updated to include help on VO objects. ----------------------------- -revision 1.3 -date: 2005-06-07 17:41:42 +0000; author: noel; state: Exp; lines: +10 -10 -Updated version. ----------------------------- -revision 1.2 -date: 2004-11-27 19:30:43 +0000; author: noel; state: Exp; lines: +9 -14 - -Minor syntax and installation adjustments. -Change to vo_checkbox to fix a typo. ----------------------------- -revision 1.1 -date: 2004-02-17 22:00:15 +0000; author: noel; state: Exp; -These files are only in cvs for backup purposes. They should be extracted -from vo_readme.txt and never edited themselves: - INSTALL - LICENSE - VERSION -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/install.sh,v -Working file: install.sh -head: 1.3 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 3; selected revisions: 3 -description: ----------------------------- -revision 1.3 -date: 2005-06-06 18:42:29 +0000; author: noel; state: Exp; lines: +3 -0 -Added support for color schemes. ----------------------------- -revision 1.2 -date: 2004-11-27 19:30:43 +0000; author: noel; state: Exp; lines: +2 -2 - -Minor syntax and installation adjustments. -Change to vo_checkbox to fix a typo. ----------------------------- -revision 1.1 -date: 2004-05-02 19:03:01 +0000; author: noel; state: Exp; -Added to the distro. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/vimoutlinerrc,v -Working file: vimoutlinerrc -head: 1.6 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 6; selected revisions: 6 -description: ----------------------------- -revision 1.6 -date: 2005-06-07 12:39:01 +0000; author: noel; state: Exp; lines: +9 -78 -Enabled checkboxes and hoisting by default. -Added Vim colorscheme support. ----------------------------- -revision 1.5 -date: 2005-01-19 15:06:20 +0000; author: noel; state: Exp; lines: +4 -3 -Fixed another W18 error. -Enabled hoisting and checkboxes by default. ----------------------------- -revision 1.4 -date: 2004-05-24 15:56:34 +0000; author: noel; state: Exp; lines: +45 -0 -Added highlighting and folding support for: - Tables (marked with '|') - User-defined, wrapping text (marked with '>') - User-defined, non-wrapping text (marked with '<') ----------------------------- -revision 1.3 -date: 2004-05-17 17:27:55 +0000; author: noel; state: Exp; lines: +2 -2 -Fixed plugin loaders for checkboxes and hoisting. ----------------------------- -revision 1.2 -date: 2004-03-18 13:23:53 +0000; author: noel; state: Exp; lines: +1 -0 -Added a line to change the background. ----------------------------- -revision 1.1 -date: 2004-02-17 21:50:36 +0000; author: noel; state: Exp; -This file will be provided from now on to make it easy for people -to customize their settings. The install process will rename this file -to .vimoutlinerrc and put it into the user's home directory. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/Attic/vo_INSTALL.TXT,v -Working file: vo_INSTALL.TXT -head: 1.2 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 2; selected revisions: 2 -description: ----------------------------- -revision 1.2 -date: 2005-06-07 17:24:05 +0000; author: noel; state: dead; lines: +0 -0 -*** empty log message *** ----------------------------- -revision 1.1 -date: 2003-06-26 19:52:07 +0000; author: noel; state: Exp; -Initial add to VimOutliner -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/Attic/vo_README.otl,v -Working file: vo_README.otl -head: 1.4 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 4; selected revisions: 4 -description: ----------------------------- -revision 1.4 -date: 2005-06-07 17:24:05 +0000; author: noel; state: dead; lines: +0 -0 -*** empty log message *** ----------------------------- -revision 1.3 -date: 2003-10-17 02:17:07 +0000; author: noel; state: Exp; lines: +2 -2 -Changed version numbers. ----------------------------- -revision 1.2 -date: 2003-06-20 14:13:15 +0000; author: noel; state: Exp; lines: +4 -41 -Final documentation tweaks for the final 0.3.0 release. ----------------------------- -revision 1.1 -date: 2003-06-18 13:55:03 +0000; author: noel; state: Exp; -Added this documentation to Vim Outliner. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/add-ons/plugins/vo_checkbox.otl,v -Working file: add-ons/plugins/vo_checkbox.otl -head: 1.3 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 3; selected revisions: 3 -description: ----------------------------- -revision 1.3 -date: 2004-11-27 19:30:43 +0000; author: noel; state: Exp; lines: +12 -8 - -Minor syntax and installation adjustments. -Change to vo_checkbox to fix a typo. ----------------------------- -revision 1.2 -date: 2004-05-17 15:57:58 +0000; author: noel; state: Exp; lines: +6 -0 -Modified documentation to match current version. ----------------------------- -revision 1.1 -date: 2003-10-23 22:13:00 +0000; author: noel; state: Exp; -Instructions for vo_checkbox.vim -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/add-ons/plugins/vo_checkbox.vim,v -Working file: add-ons/plugins/vo_checkbox.vim -head: 1.18 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 18; selected revisions: 18 -description: ----------------------------- -revision 1.18 -date: 2005-06-07 15:08:59 +0000; author: noel; state: Exp; lines: +12 -45 -Fixed a bug that added checkboxes to body text, preformatted body text, -tables, user-defined text and user-defined preformatted text lines. -Fixed a bug where ,,cb would modify terms like 'test%' or ',,c%'. Now -it only modifies this term: ' [0-9]*%'. ----------------------------- -revision 1.17 -date: 2005-06-07 13:53:22 +0000; author: noel; state: Exp; lines: +8 -2 -Added ,,cp. It is the same as ,,c% ----------------------------- -revision 1.16 -date: 2004-05-27 22:22:48 +0000; author: noel; state: Exp; lines: +24 -4 -Made ,,cd smart so it would try to delete non-existent checkboxes. -Fixed a recursion bug in NewHMD to branches with a single child would -be computed properly. ----------------------------- -revision 1.15 -date: 2004-05-27 18:11:53 +0000; author: noel; state: Exp; lines: +25 -5 -Added smart (only the entire tree in which the child exists), automatic -completion calculations to the ,,cx command. -Added smart (only for parents, not children) '%' sign insertion for -,,c%. ----------------------------- -revision 1.14 -date: 2004-05-17 15:53:38 +0000; author: noel; state: Exp; lines: +13 -7 -Modified SwitchBox() to be more selective. ----------------------------- -revision 1.13 -date: 2004-05-17 15:43:23 +0000; author: noel; state: Exp; lines: +7 -3 -Fixed a broken key mapping: ,,c%. ----------------------------- -revision 1.12 -date: 2004-02-23 12:19:27 +0000; author: noel; state: Exp; lines: +26 -9 -Fixed Up-to-date problem. -Fixed 'Safely script names'. ----------------------------- -revision 1.11 -date: 2003-09-05 16:37:55 +0000; author: cepl; state: Exp; lines: +41 -2 -Added ,cp binding for the new function InsertCheckBoxPerCent, -which adds not only the checkbox but also percentage sign. ----------------------------- -revision 1.10 -date: 2003-08-23 16:42:15 +0000; author: noel; state: Exp; lines: +18 -17 -Modified completion percentages to be recursive. -This: -[_] 0% Project - [_] 33% Task - [_] Subtask - [X] Subtask - [X] Subtask - [_] 0% Task - [_] Subtask - [_] 50% Subtask - [X] Subsubtask - [_] Subsubtask - [X] Subsubtask - [_] Subsubtask - -Becomes this: -[_] 29% Project - [_] 33% Task - [_] Subtask - [X] Subtask - [X] Subtask - [_] 25% Task - [_] Subtask - [_] 50% Subtask - [X] Subsubtask - [_] Subsubtask - [X] Subsubtask - [_] Subsubtask ----------------------------- -revision 1.9 -date: 2003-08-16 13:49:53 +0000; author: noel; state: Exp; lines: +9 -7 -added ! to functions. ----------------------------- -revision 1.8 -date: 2003-08-11 19:16:28 +0000; author: noel; state: Exp; lines: +30 -5 -Fixed a bug in which any line that contained the letter x was counted as -completed. ----------------------------- -revision 1.7 -date: 2003-08-03 23:56:46 +0000; author: noel; state: Exp; lines: +89 -40 - -Replaced HowManyDone() with a new routine. The new routine is recursive, -ignores headings that don't have checkboxes and does not care what the -current folding states of the parent or children are. The heading at the -top of the tree does not even need to have a checkbox. This will work: - -Projects - [_] Software - [_] Input - [_] Processing - [_] Math - [_] Database - [_] Networking - [_] Output - [_] Hardware - [_] Keyboard - [_] Harddisk - [_] Processor - [_] Printer - -One only needs to ,,cx on Projects to update everything (everything shown). -As before, including a % on a parent heading with childred, will be replaced -with a percentage of completion. Nice work Matej! ----------------------------- -revision 1.6 -date: 2003-07-14 00:36:57 +0000; author: noel; state: Exp; lines: +9 -5 -Changed [x] to [X] to make it look more full. If the consensus is -[x], I'll gladly put it back. ----------------------------- -revision 1.5 -date: 2003-07-10 16:29:50 +0000; author: cepl; state: Exp; lines: +75 -3 -Calculation of the subtree completion added. The very first alpha -draft. ----------------------------- -revision 1.4 -date: 2003-07-08 23:48:43 +0000; author: noel; state: Exp; lines: +6 -3 -Fixed a bug in cd. It used to only delete unchecked boxes. -Now it does both. ----------------------------- -revision 1.3 -date: 2003-07-07 14:17:04 +0000; author: noel; state: Exp; lines: +11 -6 -Fixed the folding of the new headers. ----------------------------- -revision 1.2 -date: 2003-07-07 14:14:02 +0000; author: noel; state: Exp; lines: +24 -0 -Added appropriate headers. ----------------------------- -revision 1.1 -date: 2003-07-07 13:52:45 +0000; author: noel; state: Exp; -Changed checkbox.vim to vo_checkbox.vim -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/add-ons/plugins/vo_hoist.otl,v -Working file: add-ons/plugins/vo_hoist.otl -head: 1.1 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 1; selected revisions: 1 -description: ----------------------------- -revision 1.1 -date: 2003-10-23 22:12:20 +0000; author: noel; state: Exp; -Instructions for vo_hoist.vim. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/add-ons/plugins/vo_hoist.vim,v -Working file: add-ons/plugins/vo_hoist.vim -head: 1.9 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 9; selected revisions: 9 -description: ----------------------------- -revision 1.9 -date: 2003-11-12 17:26:09 +0000; author: noel; state: Exp; lines: +6 -2 -Added a command to place the cursor on the first line of -a hoisted outline. ----------------------------- -revision 1.8 -date: 2003-11-12 17:10:51 +0000; author: noel; state: Exp; lines: +9 -3 -Fixed a bug that occurs on a level 1 heading with no children. ----------------------------- -revision 1.7 -date: 2003-10-23 22:14:14 +0000; author: noel; state: Exp; lines: +13 -5 -Minor changes to DeHoist() to compensate for current foldlevel settings. ----------------------------- -revision 1.6 -date: 2003-08-17 15:35:24 +0000; author: noel; state: Exp; lines: +10 -9 -Put the new mappings in the correct place this time. -Added a : and to the ZZ command. ----------------------------- -revision 1.5 -date: 2003-08-17 14:47:42 +0000; author: noel; state: Exp; lines: +8 -2 -Added ZZ, qa, and x to the list of commands that de-hoist the current -outline. ----------------------------- -revision 1.4 -date: 2003-08-17 00:07:31 +0000; author: noel; state: Exp; lines: +13 -10 -Added "silent" to commands generating tedious messages. ----------------------------- -revision 1.3 -date: 2003-08-16 20:08:06 +0000; author: noel; state: Exp; lines: +11 -6 -Removed a need to exclude fold level 1 headings. ----------------------------- -revision 1.2 -date: 2003-08-16 19:02:44 +0000; author: noel; state: Exp; lines: +84 -31 -First fully functional version. May need some tweaks but it works and is -quite easy to use. ----------------------------- -revision 1.1 -date: 2003-08-14 21:05:05 +0000; author: noel; state: Exp; -First publicly available, experiment verison -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/colors/vo_dark.vim,v -Working file: colors/vo_dark.vim -head: 1.2 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 2; selected revisions: 2 -description: ----------------------------- -revision 1.2 -date: 2005-06-07 15:24:30 +0000; author: noel; state: Exp; lines: +1 -1 -The color darkyellow does not appear to exist on some systems. This color -has been changed to darkred. ----------------------------- -revision 1.1 -date: 2005-06-06 18:45:11 +0000; author: noel; state: Exp; -These are the new color scheme files. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/colors/vo_light.vim,v -Working file: colors/vo_light.vim -head: 1.2 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 2; selected revisions: 2 -description: ----------------------------- -revision 1.2 -date: 2005-06-07 15:24:30 +0000; author: noel; state: Exp; lines: +3 -3 -The color darkyellow does not appear to exist on some systems. This color -has been changed to darkred. ----------------------------- -revision 1.1 -date: 2005-06-06 18:45:11 +0000; author: noel; state: Exp; -These are the new color scheme files. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/doc/vo_readme.txt,v -Working file: doc/vo_readme.txt -head: 1.9 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 9; selected revisions: 9 -description: ----------------------------- -revision 1.9 -date: 2005-06-07 17:48:21 +0000; author: noel; state: Exp; lines: +4 -0 -Added a better VERSION description. ----------------------------- -revision 1.8 -date: 2005-06-07 16:44:58 +0000; author: noel; state: Exp; lines: +294 -150 -Added a section about VO objects. -Added the ,,cp command. ----------------------------- -revision 1.7 -date: 2004-05-28 15:28:47 +0000; author: noel; state: Exp; lines: +274 -28 -Added complete help for vo_checkbox.vim. ----------------------------- -revision 1.6 -date: 2004-05-17 17:16:28 +0000; author: noel; state: Exp; lines: +1 -1 -Changed 0.3.2 to 0.3.3 in the tite. ----------------------------- -revision 1.5 -date: 2004-05-17 15:21:25 +0000; author: noel; state: Exp; lines: +75 -69 -Modified to reflecte 0.3.3 changes. ----------------------------- -revision 1.4 -date: 2004-02-17 21:52:41 +0000; author: noel; state: Exp; lines: +263 -111 -Modified heavily by Stefan Schiedl for 0.3.2. ----------------------------- -revision 1.3 -date: 2003-10-17 02:18:07 +0000; author: noel; state: Exp; lines: +44 -7 -Changed version numbers. ----------------------------- -revision 1.2 -date: 2003-06-20 14:13:15 +0000; author: noel; state: Exp; lines: +5 -42 -Final documentation tweaks for the final 0.3.0 release. ----------------------------- -revision 1.1 -date: 2003-06-18 13:55:03 +0000; author: noel; state: Exp; -Added this documentation to Vim Outliner. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/experimental/Attic/checkbox.vim,v -Working file: experimental/checkbox.vim -head: 1.2 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 2; selected revisions: 2 -description: ----------------------------- -revision 1.2 -date: 2003-07-07 13:52:45 +0000; author: noel; state: dead; lines: +0 -0 -Changed checkbox.vim to vo_checkbox.vim ----------------------------- -revision 1.1 -date: 2003-07-07 01:22:35 +0000; author: noel; state: Exp; -Initial experimental version of checkboxes. -Contains only one function and two mappings. -The only capabilities are to add and delete check boxes from -the beginnings of headings. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/filetype/Attic/filetype.vim,v -Working file: filetype/filetype.vim -head: 1.5 -branch: -locks: strict -access list: -symbolic names: - arelease: 1.1.1.1 - avendor: 1.1.1 - testfork: 1.3.0.2 -keyword substitution: kv -total revisions: 6; selected revisions: 6 -description: -VimOutliner filetype.vim ----------------------------- -revision 1.5 -date: 2005-06-07 17:26:52 +0000; author: noel; state: dead; lines: +5 -2 -*** empty log message *** ----------------------------- -revision 1.4 -date: 2003-03-01 17:37:17 +0000; author: noel; state: Exp; lines: +6 -3 -Changed the filetype name to our new standard: vo_base ----------------------------- -revision 1.3 -date: 2003-02-14 17:49:43 +0000; author: noel; state: Exp; lines: +6 -4 -Removed unnecessary filetype commands ----------------------------- -revision 1.2 -date: 2003-02-09 15:07:35 +0000; author: noel; state: Exp; lines: +8 -7 -Changed the auto commands. Setting the "filetype plugin indent on" -option here does not work with ftplugins. ----------------------------- -revision 1.1 -date: 2003-02-08 21:11:26 +0000; author: noel; state: Exp; -branches: 1.1.1; -Initial revision ----------------------------- -revision 1.1.1.1 -date: 2003-03-20 22:35:15 +0000; author: noel; state: Exp; lines: +17 -8 -no message -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/filetype/vo_base.vim,v -Working file: filetype/vo_base.vim -head: 1.1 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 1; selected revisions: 1 -description: ----------------------------- -revision 1.1 -date: 2005-01-19 16:12:37 +0000; author: noel; state: Exp; -Finally added to CVS. -Don't know how I missed this one. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/ftplugin/vo_base.vim,v -Working file: ftplugin/vo_base.vim -head: 2.59 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 59; selected revisions: 59 -description: -Vim Outliner Main Program File ----------------------------- -revision 2.59 -date: 2005-06-07 19:50:45 +0000; author: noel; state: Exp; lines: +2 -1 -Re-removed the did_filetype() function. Restored the original variable-based -solution. ----------------------------- -revision 2.58 -date: 2005-06-07 12:47:38 +0000; author: noel; state: Exp; lines: +1 -2 -Modified switch that prevents the filetype from being loaded more than once. ----------------------------- -revision 2.57 -date: 2004-05-24 22:31:11 +0000; author: noel; state: Exp; lines: +0 -6 -Removed a redundant PreformattedBodyText() function. ----------------------------- -revision 2.56 -date: 2004-05-24 15:56:34 +0000; author: noel; state: Exp; lines: +78 -0 -Added highlighting and folding support for: - Tables (marked with '|') - User-defined, wrapping text (marked with '>') - User-defined, non-wrapping text (marked with '<') ----------------------------- -revision 2.55 -date: 2004-05-17 15:18:20 +0000; author: noel; state: Exp; lines: +20 -1 -Added Steve Litt's simple executable lines. ----------------------------- -revision 2.54 -date: 2004-05-17 14:18:27 +0000; author: noel; state: Exp; lines: +41 -16 -Replaced system calls to 'date' with strftime(). -Modified the time- and date-stamp functions. -normal t append the time to the current heading -normal T prepend the time to the current heading -insert t insert the time at the cursor -normal d append the date to the current heading -normal D prepend the date to the current heading -insert d insert the date at the cursor ----------------------------- -revision 2.53 -date: 2004-05-17 13:32:38 +0000; author: noel; state: Exp; lines: +2 -2 -Added to end of sort commands. ----------------------------- -revision 2.52 -date: 2004-05-17 13:30:12 +0000; author: noel; state: Exp; lines: +167 -2 -Added child-aware sorting functions. -Mapped s to sort ascending. -Mapped S to sort descending. ----------------------------- -revision 2.51 -date: 2004-03-18 13:25:46 +0000; author: noel; state: Exp; lines: +1 -1 -Fixed a mapping command for w ----------------------------- -revision 2.50 -date: 2004-02-17 21:47:31 +0000; author: noel; state: Exp; lines: +0 -217 -Removed the detailed revision log. It's getting too big. From now on -'cvs log' will need to be used to see the log. ----------------------------- -revision 2.49 -date: 2003-10-17 01:37:10 +0000; author: noel; state: Exp; lines: +24 -10 -Fixed a minor folding issue. ----------------------------- -revision 2.48 -date: 2003-08-04 13:25:17 +0000; author: noel; state: Exp; lines: +37 -7 -Corrected a type for w ----------------------------- -revision 2.47 -date: 2003-06-16 23:57:20 +0000; author: noel; state: Exp; lines: +7 -3 -Set UseSpaceColon=0. This is now the standard. ----------------------------- -revision 2.46 -date: 2003-06-04 11:54:25 +0000; author: noel; state: Exp; lines: +24 -6 -The behavior of the "d" and "t" commands have been improved and put into -functions. These commands are now mapped to call the improved functions. ----------------------------- -revision 2.45 -date: 2003-06-04 11:25:56 +0000; author: noel; state: Exp; lines: +12 -3 -Moved the modification to the tags path outside the "if" statement in -autocommands in ftplugin. Completely removed the line from syntax. ----------------------------- -revision 2.44 -date: 2003-05-27 13:33:34 +0000; author: noel; state: Exp; lines: +45 -29 -Added Vim style folds to both vo_base files to make them easier to read. -Added a mode line to the end of each to activate the folds. -Added a "Documentation" section that is mostly empty. This section will -eventually be extracted automatically to form the online help via Vim's -built-in help mechanisms. ----------------------------- -revision 2.43 -date: 2003-05-23 18:36:44 +0000; author: noel; state: Exp; lines: +7 -4 -More trouble with the ,,d function and retaining proper indentation. ----------------------------- -revision 2.42 -date: 2003-05-23 16:02:42 +0000; author: noel; state: Exp; lines: +8 -2 -Added tag file support for ~/.vimoutliner. ----------------------------- -revision 2.41 -date: 2003-05-23 13:55:25 +0000; author: noel; state: Exp; lines: +10 -6 -Modified the d and t commands. They did not work properly on closed folds. -Commented-out the d and t commands when in insert mode. I have not used them -and they don't work properly. ----------------------------- -revision 2.40 -date: 2003-05-17 23:29:25 +0000; author: noel; state: Exp; lines: +11 -6 -Modified date and time (,,d/,,t) to place date/time at beginning of -line instead of end of line to allow for sorting. ----------------------------- -revision 2.39 -date: 2003-05-17 22:49:26 +0000; author: noel; state: Exp; lines: +20 -16 -Changed ^M to in all occurrances. -Modified date (d) and time (t) to add date/time to end of -current line. ----------------------------- -revision 2.38 -date: 2003-03-05 17:58:22 +0000; author: cepl; state: Exp; lines: +6 -3 -Personal configuration file was not run from the user's $HOME directory. -Fixed. ----------------------------- -revision 2.37 -date: 2003-03-03 16:24:49 +0000; author: noel; state: Exp; lines: +6 -3 -Added ~/.vim and ~/.vimoutliner as places to look for tag files. ----------------------------- -revision 2.36 -date: 2003-03-01 17:37:41 +0000; author: noel; state: Exp; lines: +13 -5 -Changed the filetype name to our new standard: vo_base ----------------------------- -revision 2.35 -date: 2003-02-09 15:04:56 +0000; author: noel; state: Exp; lines: +70 -55 -Changed key mappings to be local to the current buffer only. They -will also be loaded for any subsequent .otl file. -Changed key mappings to use an easily modifiable leader. In this case -",,". -Changed the scope of some variables. They had a buffer scoping but now -have a function scope. ----------------------------- -revision 2.34 -date: 2003-02-08 22:07:47 +0000; author: noel; state: Exp; lines: +5 -63 -Removed spellfix functions. Perhaps I'll make them another plugin. ----------------------------- -revision 2.33 -date: 2003-02-08 21:31:01 +0000; author: noel; state: Exp; lines: +5 -116 -Split out syntax settings as Dillon originally showed. ----------------------------- -revision 2.32 -date: 2003-01-30 01:47:41 +0000; author: noel; state: Exp; lines: +6 -3 -modified switches sent to ispell to make it guess better. ----------------------------- -revision 2.31 -date: 2003-01-28 22:31:37 +0000; author: noel; state: Exp; lines: +6 -3 -Modified setlocal foldtext.... to set foldtext.... ----------------------------- -revision 2.30 -date: 2003-01-22 22:03:12 +0000; author: noel; state: Exp; lines: +8 -3 -Fixed bodytext folding method. ----------------------------- -revision 2.29 -date: 2003-01-21 00:18:50 +0000; author: noel; state: Exp; lines: +20 -7 -Fixed a problem with runtimepath. -Added a use_space_colon setting to that one can choose between bodytext -marked with a : or with a space-:. ----------------------------- -revision 2.28 -date: 2003-01-19 16:46:27 +0000; author: noel; state: Exp; lines: +11 -3 -Removed some strange escape characters from a revision comment. ----------------------------- -revision 2.27 -date: 2003-01-19 16:16:54 +0000; author: noel; state: Exp; lines: +101 -88 -Added detection of the color scheme and an alternative set of colors -for dark backgrounds. (well actually for non-"light" backgrounds) at -Dillon Jones' request. -Set the "current_syntax" at Dillon's request. -Modified the exe lines in the source to remove the debugging style I was -using. ----------------------------- -revision 2.26 -date: 2003-01-16 00:56:51 +0000; author: noel; state: Exp; lines: +26 -23 -Changed a bunch of set commands to setlocal commands at the -suggestion of Jeffrey Hood. Thanks, Jeffrey! ----------------------------- -revision 2.25 -date: 2003-01-13 17:05:08 +0000; author: noel; state: Exp; lines: +14 -11 -Fixed a problem with the new regex that define headings. ----------------------------- -revision 2.24 -date: 2003-01-12 19:08:32 +0000; author: noel; state: Exp; lines: +36 -25 -Converted from _ to : ----------------------------- -revision 2.23 -date: 2003-01-11 21:00:33 +0000; author: noel; state: Exp; lines: +55 -38 -Added Matej requirement for personalization settings via -.vimoutlinerrc. -Added Steve's style of bodytext that allows for wrapping and formatting -with have the headings wrap as well. It is currently set for "_" as -the bodytext marker. -Added ,,b to set all bodytext to Steve's style. -Added ,,B to set all bodytext to my style. This will also make it -possible for Steve's style to be quickly reformatted for pretty -printing with :ha. ----------------------------- -revision 2.22 -date: 2003-01-11 00:35:32 +0000; author: noel; state: Exp; lines: +7 -2 -[6~Added support for .vimoutlinerrc in both ~ and ~/.vimoutliner. ----------------------------- -revision 2.21 -date: 2002-12-12 13:38:58 +0000; author: noel; state: Exp; lines: +10 -3 -Fixed a spelling problem when words contain a '. ----------------------------- -revision 2.20 -date: 2002-12-11 23:33:16 +0000; author: noel; state: Exp; lines: +7 -3 -Removed a debug setting, again (sigh). -Added some iskeyword symbols so spell-check would work on things -like: don't ----------------------------- -revision 2.19 -date: 2002-12-11 22:55:19 +0000; author: noel; state: Exp; lines: +24 -11 -Fixed body text end error. I was checking for too specific a case. ----------------------------- -revision 2.18 -date: 2002-12-11 14:57:52 +0000; author: noel; state: Exp; lines: +7 -4 -Fixed wrapmargin setting and a line counter error during folding. ----------------------------- -revision 2.17 -date: 2002-12-11 00:42:47 +0000; author: noel; state: Exp; lines: +7 -3 -Removed a debug setting, again. ----------------------------- -revision 2.16 -date: 2002-12-10 22:21:09 +0000; author: noel; state: Exp; lines: +19 -14 -Moved body text up one tab level. It seems to be more intuitive -to others. ----------------------------- -revision 2.15 -date: 2002-12-10 19:24:13 +0000; author: noel; state: Exp; lines: +6 -2 -Added a function to auto-wrap lines. This could be a problem for entering long headings. ----------------------------- -revision 2.14 -date: 2002-12-10 18:11:13 +0000; author: noel; state: Exp; lines: +9 -3 -Removed a debug feature ----------------------------- -revision 2.13 -date: 2002-12-10 17:59:42 +0000; author: noel; state: Exp; lines: +45 -15 -Added bodytext. -Added bodytext folding. -Modified MyFoldText to show [TEXT] for folded bodytext. -Added an autocommand to re-sync the folding. ----------------------------- -revision 2.12 -date: 2002-12-09 18:16:49 +0000; author: noel; state: Exp; lines: +11 -4 -Fixed a typo and added an extra \ before & for adding upper cas3e -words. ----------------------------- -revision 2.11 -date: 2002-12-09 17:15:37 +0000; author: noel; state: Exp; lines: +13 -5 -Added ,,kA. -Swapped functions of ,,ka and ,,kA. - ,,ka add lowercase version of word to dictionary - ,,kA add word as it appears to dictionary ----------------------------- -revision 2.10 -date: 2002-12-09 17:08:47 +0000; author: noel; state: Exp; lines: +15 -8 -Fixed an error that occurs when there is just a single spelling checker. ----------------------------- -revision 2.9 -date: 2002-12-09 16:42:02 +0000; author: noel; state: Exp; lines: +13 -7 -Fixed error messages on searches with no matches. -This is part of the spell-check search. ----------------------------- -revision 2.8 -date: 2002-12-09 14:21:29 +0000; author: noel; state: Exp; lines: +11 -8 -Fixed spelling highlighting and and spelling searches so that only real matches are highlighed and possible to jump to with ,,kn and ,,kN (and n and N after -that). -Modified the "source" statement that load spellfix.vim. Spellfix.vim now -needs to be in ~/.vimoutliner. ----------------------------- -revision 2.7 -date: 2002-12-07 22:08:02 +0000; author: noel; state: Exp; lines: +30 -39 -finished integration of spellfix.vim ----------------------------- -revision 2.6 -date: 2002-12-07 16:46:47 +0000; author: noel; state: Exp; lines: +86 -6 -Added these commands to enhance the spelling checker - ,,kk speck-check document highlighting errors - ,,ka add the word under the cursor to the selected dictionary - ,,kn search forward to the next spelling error - N and n both work well with this - ,,kN search backward to the next spelling error - N and n both work well with this - ,,kq unhighlight the spelling errors ----------------------------- -revision 2.5 -date: 2002-11-27 22:54:28 +0000; author: noel; state: Exp; lines: +22 -16 -Changed date and time formats. -changed the mappings of ,,0-,,9 so that ,,1 corresponds to show only -1 level. ----------------------------- -revision 2.4 -date: 2002-11-26 00:36:08 +0000; author: noel; state: Exp; lines: +68 -62 -Added more comments. -Added Steve's GPL header. -Will keep the RCS info in my version but will remove it for -distribution. ----------------------------- -revision 2.3 -date: 2002-11-21 19:30:37 +0000; author: noel; state: Exp; lines: +21 -8 -Included a patchfile from Steve to: - move the if loaded behavior to a place in the file after the settings - add an if loaded behavior for the file extension autocommmand - added the nocindent setting - changed the ,,,, mapping - clear the indexexpr setting ----------------------------- -revision 2.2 -date: 2002-11-16 00:00:10 +0000; author: noel; state: Exp; lines: +215 -196 -Added more comments. -Switched the polarity of the if exists(loaded_outliner) function -Commented-out some experimental features. -Grouped the user preferences together and separated out the -VimOutliner operational settings. ----------------------------- -revision 2.1 -date: 2002-11-15 23:37:39 +0000; author: noel; state: Exp; -Version 2 Beta Candidate before pre-release modifications -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/otf/otf.vim,v -Working file: otf/otf.vim -head: 1.3 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 3; selected revisions: 3 -description: ----------------------------- -revision 1.3 -date: 2003-06-03 19:56:09 +0000; author: gabriel; state: Exp; lines: +2 -2 -changed bash function to perl,corrected file name error in otf.vi ----------------------------- -revision 1.2 -date: 2003-06-02 21:01:16 +0000; author: gabriel; state: Exp; lines: +9 -9 -created wishlist_demo.otl -changed output files of Createotl() in otf.vim so users need only a ~/bin directory ----------------------------- -revision 1.1 -date: 2003-06-01 13:16:32 +0000; author: gabriel; state: Exp; -new 'on the fly' files -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/otf/otfREADME,v -Working file: otf/otfREADME -head: 1.4 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 4; selected revisions: 4 -description: ----------------------------- -revision 1.4 -date: 2003-06-03 20:21:43 +0000; author: gabriel; state: Exp; lines: +2 -1 -instruction where to put otl.pl ----------------------------- -revision 1.3 -date: 2003-06-03 19:56:09 +0000; author: gabriel; state: Exp; lines: +2 -3 -changed bash function to perl,corrected file name error in otf.vi ----------------------------- -revision 1.2 -date: 2003-06-02 21:01:16 +0000; author: gabriel; state: Exp; lines: +12 -7 -created wishlist_demo.otl -changed output files of Createotl() in otf.vim so users need only a ~/bin directory ----------------------------- -revision 1.1 -date: 2003-06-01 13:16:32 +0000; author: gabriel; state: Exp; -new 'on the fly' files -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/otf/otl,v -Working file: otf/otl -head: 1.2 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 2; selected revisions: 2 -description: ----------------------------- -revision 1.2 -date: 2003-06-02 21:01:16 +0000; author: gabriel; state: Exp; lines: +2 -5 -created wishlist_demo.otl -changed output files of Createotl() in otf.vim so users need only a ~/bin directory ----------------------------- -revision 1.1 -date: 2003-06-01 13:16:32 +0000; author: gabriel; state: Exp; -new 'on the fly' files -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/otf/otl.pl,v -Working file: otf/otl.pl -head: 1.1 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 1; selected revisions: 1 -description: ----------------------------- -revision 1.1 -date: 2003-06-03 19:57:00 +0000; author: gabriel; state: Exp; -new script replacing otl -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/otf/wishlist_demo.otl,v -Working file: otf/wishlist_demo.otl -head: 1.3 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 3; selected revisions: 3 -description: ----------------------------- -revision 1.3 -date: 2003-06-03 20:21:43 +0000; author: gabriel; state: Exp; lines: +2 -1 -instruction where to put otl.pl ----------------------------- -revision 1.2 -date: 2003-06-02 21:29:49 +0000; author: gabriel; state: Exp; lines: +28 -18 -changed Otl fns branch so it had the correct parents ----------------------------- -revision 1.1 -date: 2003-06-02 21:01:16 +0000; author: gabriel; state: Exp; -created wishlist_demo.otl -changed output files of Createotl() in otf.vim so users need only a ~/bin directory -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/scripts/vo_maketags.pl,v -Working file: scripts/vo_maketags.pl -head: 1.1 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 1; selected revisions: 1 -description: ----------------------------- -revision 1.1 -date: 2003-06-20 14:13:15 +0000; author: noel; state: Exp; -Final documentation tweaks for the final 0.3.0 release. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/syntax/vo_base.vim,v -Working file: syntax/vo_base.vim -head: 2.47 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 47; selected revisions: 47 -description: -Vim Outliner Main Program File ----------------------------- -revision 2.47 -date: 2005-06-07 15:24:30 +0000; author: noel; state: Exp; lines: +4 -4 -The color darkyellow does not appear to exist on some systems. This color -has been changed to darkred. ----------------------------- -revision 2.46 -date: 2005-01-19 15:03:55 +0000; author: noel; state: Exp; lines: +2 -1 -Fixed another W18 error. ----------------------------- -revision 2.45 -date: 2004-11-27 19:30:43 +0000; author: noel; state: Exp; lines: +6 -5 - -Minor syntax and installation adjustments. -Change to vo_checkbox to fix a typo. ----------------------------- -revision 2.44 -date: 2004-05-24 15:56:34 +0000; author: noel; state: Exp; lines: +142 -19 -Added highlighting and folding support for: - Tables (marked with '|') - User-defined, wrapping text (marked with '>') - User-defined, non-wrapping text (marked with '<') ----------------------------- -revision 2.43 -date: 2004-02-17 21:48:47 +0000; author: noel; state: Exp; lines: +0 -297 -Removed the embedded and out-of-date documentation. -Removed the detailed revision log. It's too large. From now on -'cvs log' will be needed to see the log. ----------------------------- -revision 2.42 -date: 2003-10-17 01:34:03 +0000; author: noel; state: Exp; lines: +43 -30 - -Modified highlighting to support extended character sets. ----------------------------- -revision 2.41 -date: 2003-06-04 11:25:56 +0000; author: noel; state: Exp; lines: +5 -3 -Moved the modification to the tags path outside the "if" statement in -autocommands in ftplugin. Completely removed the line from syntax. ----------------------------- -revision 2.40 -date: 2003-05-27 15:03:26 +0000; author: noel; state: Exp; lines: +88 -23 -Added some documentation on the commands. ----------------------------- -revision 2.39 -date: 2003-05-27 13:33:34 +0000; author: noel; state: Exp; lines: +73 -16 -Added Vim style folds to both vo_base files to make them easier to read. -Added a mode line to the end of each to activate the folds. -Added a "Documentation" section that is mostly empty. This section will -eventually be extracted automatically to form the online help via Vim's -built-in help mechanisms. ----------------------------- -revision 2.38 -date: 2003-05-23 16:02:42 +0000; author: noel; state: Exp; lines: +8 -3 -Added tag file support for ~/.vimoutliner. ----------------------------- -revision 2.37 -date: 2003-03-01 17:07:53 +0000; author: noel; state: Exp; lines: +34 -36 -Removed the bold and underline glamour. -It did not work with the level colorization nor properly cross line boundries. ----------------------------- -revision 2.36 -date: 2003-02-12 15:40:26 +0000; author: noel; state: Exp; lines: +41 -32 -Added some glamour. *word* make word bold and _word_ underlines a word. ----------------------------- -revision 2.35 -date: 2003-02-09 14:54:10 +0000; author: noel; state: Exp; lines: +7 -3 -Removed syntax highlighting for SpellErrors and BadWord. The plugins -include their own. ----------------------------- -revision 2.34 -date: 2003-02-08 21:59:25 +0000; author: noel; state: Exp; lines: +36 -31 -Added SpellErrors and BadWord to the contains attributes of headings -and bodytext. Now we're compatible with engspchk and vimspell. ----------------------------- -revision 2.33 -date: 2003-02-08 21:34:46 +0000; author: noel; state: Exp; lines: +5 -213 -Split out functions as Dillon originally showed. ----------------------------- -revision 2.32 -date: 2003-01-30 01:47:41 +0000; author: noel; state: Exp; lines: +6 -3 -modified switches sent to ispell to make it guess better. ----------------------------- -revision 2.31 -date: 2003-01-28 22:31:37 +0000; author: noel; state: Exp; lines: +6 -3 -Modified setlocal foldtext.... to set foldtext.... ----------------------------- -revision 2.30 -date: 2003-01-22 22:03:12 +0000; author: noel; state: Exp; lines: +8 -3 -Fixed bodytext folding method. ----------------------------- -revision 2.29 -date: 2003-01-21 00:18:50 +0000; author: noel; state: Exp; lines: +20 -7 -Fixed a problem with runtimepath. -Added a use_space_colon setting to that one can choose between bodytext -marked with a : or with a space-:. ----------------------------- -revision 2.28 -date: 2003-01-19 16:46:27 +0000; author: noel; state: Exp; lines: +11 -3 -Removed some strange escape characters from a revision comment. ----------------------------- -revision 2.27 -date: 2003-01-19 16:16:54 +0000; author: noel; state: Exp; lines: +101 -88 -Added detection of the color scheme and an alternative set of colors -for dark backgrounds. (well actually for non-"light" backgrounds) at -Dillon Jones' request. -Set the "current_syntax" at Dillon's request. -Modified the exe lines in the source to remove the debugging style I was -using. ----------------------------- -revision 2.26 -date: 2003-01-16 00:56:51 +0000; author: noel; state: Exp; lines: +26 -23 -Changed a bunch of set commands to setlocal commands at the -suggestion of Jeffrey Hood. Thanks, Jeffrey! ----------------------------- -revision 2.25 -date: 2003-01-13 17:05:08 +0000; author: noel; state: Exp; lines: +14 -11 -Fixed a problem with the new regex that define headings. ----------------------------- -revision 2.24 -date: 2003-01-12 19:08:32 +0000; author: noel; state: Exp; lines: +36 -25 -Converted from _ to : ----------------------------- -revision 2.23 -date: 2003-01-11 21:00:33 +0000; author: noel; state: Exp; lines: +55 -38 -Added Matej requirement for personalization settings via -.vimoutlinerrc. -Added Steve's style of bodytext that allows for wrapping and formatting -with have the headings wrap as well. It is currently set for "_" as -the bodytext marker. -Added ,,b to set all bodytext to Steve's style. -Added ,,B to set all bodytext to my style. This will also make it -possible for Steve's style to be quickly reformatted for pretty -printing with :ha. ----------------------------- -revision 2.22 -date: 2003-01-11 00:35:32 +0000; author: noel; state: Exp; lines: +7 -2 -[6~Added support for .vimoutlinerrc in both ~ and ~/.vimoutliner. ----------------------------- -revision 2.21 -date: 2002-12-12 13:38:58 +0000; author: noel; state: Exp; lines: +10 -3 -Fixed a spelling problem when words contain a '. ----------------------------- -revision 2.20 -date: 2002-12-11 23:33:16 +0000; author: noel; state: Exp; lines: +7 -3 -Removed a debug setting, again (sigh). -Added some iskeyword symbols so spell-check would work on things -like: don't ----------------------------- -revision 2.19 -date: 2002-12-11 22:55:19 +0000; author: noel; state: Exp; lines: +24 -11 -Fixed body text end error. I was checking for too specific a case. ----------------------------- -revision 2.18 -date: 2002-12-11 14:57:52 +0000; author: noel; state: Exp; lines: +7 -4 -Fixed wrapmargin setting and a line counter error during folding. ----------------------------- -revision 2.17 -date: 2002-12-11 00:42:47 +0000; author: noel; state: Exp; lines: +7 -3 -Removed a debug setting, again. ----------------------------- -revision 2.16 -date: 2002-12-10 22:21:09 +0000; author: noel; state: Exp; lines: +19 -14 -Moved body text up one tab level. It seems to be more intuitive -to others. ----------------------------- -revision 2.15 -date: 2002-12-10 19:24:13 +0000; author: noel; state: Exp; lines: +6 -2 -Added a function to auto-wrap lines. This could be a problem for entering long headings. ----------------------------- -revision 2.14 -date: 2002-12-10 18:11:13 +0000; author: noel; state: Exp; lines: +9 -3 -Removed a debug feature ----------------------------- -revision 2.13 -date: 2002-12-10 17:59:42 +0000; author: noel; state: Exp; lines: +45 -15 -Added bodytext. -Added bodytext folding. -Modified MyFoldText to show [TEXT] for folded bodytext. -Added an autocommand to re-sync the folding. ----------------------------- -revision 2.12 -date: 2002-12-09 18:16:49 +0000; author: noel; state: Exp; lines: +11 -4 -Fixed a typo and added an extra \ before & for adding upper cas3e -words. ----------------------------- -revision 2.11 -date: 2002-12-09 17:15:37 +0000; author: noel; state: Exp; lines: +13 -5 -Added ,,kA. -Swapped functions of ,,ka and ,,kA. - ,,ka add lowercase version of word to dictionary - ,,kA add word as it appears to dictionary ----------------------------- -revision 2.10 -date: 2002-12-09 17:08:47 +0000; author: noel; state: Exp; lines: +15 -8 -Fixed an error that occurs when there is just a single spelling checker. ----------------------------- -revision 2.9 -date: 2002-12-09 16:42:02 +0000; author: noel; state: Exp; lines: +13 -7 -Fixed error messages on searches with no matches. -This is part of the spell-check search. ----------------------------- -revision 2.8 -date: 2002-12-09 14:21:29 +0000; author: noel; state: Exp; lines: +11 -8 -Fixed spelling highlighting and and spelling searches so that only real matches are highlighed and possible to jump to with ,,kn and ,,kN (and n and N after -that). -Modified the "source" statement that load spellfix.vim. Spellfix.vim now -needs to be in ~/.vimoutliner. ----------------------------- -revision 2.7 -date: 2002-12-07 22:08:02 +0000; author: noel; state: Exp; lines: +30 -39 -finished integration of spellfix.vim ----------------------------- -revision 2.6 -date: 2002-12-07 16:46:47 +0000; author: noel; state: Exp; lines: +86 -6 -Added these commands to enhance the spelling checker - ,,kk speck-check document highlighting errors - ,,ka add the word under the cursor to the selected dictionary - ,,kn search forward to the next spelling error - N and n both work well with this - ,,kN search backward to the next spelling error - N and n both work well with this - ,,kq unhighlight the spelling errors ----------------------------- -revision 2.5 -date: 2002-11-27 22:54:28 +0000; author: noel; state: Exp; lines: +22 -16 -Changed date and time formats. -changed the mappings of ,,0-,,9 so that ,,1 corresponds to show only -1 level. ----------------------------- -revision 2.4 -date: 2002-11-26 00:36:08 +0000; author: noel; state: Exp; lines: +68 -62 -Added more comments. -Added Steve's GPL header. -Will keep the RCS info in my version but will remove it for -distribution. ----------------------------- -revision 2.3 -date: 2002-11-21 19:30:37 +0000; author: noel; state: Exp; lines: +21 -8 -Included a patchfile from Steve to: - move the if loaded behavior to a place in the file after the settings - add an if loaded behavior for the file extension autocommmand - added the nocindent setting - changed the ,,,, mapping - clear the indexexpr setting ----------------------------- -revision 2.2 -date: 2002-11-16 00:00:10 +0000; author: noel; state: Exp; lines: +215 -196 -Added more comments. -Switched the polarity of the if exists(loaded_outliner) function -Commented-out some experimental features. -Grouped the user preferences together and separated out the -VimOutliner operational settings. ----------------------------- -revision 2.1 -date: 2002-11-15 23:37:39 +0000; author: noel; state: Exp; -Version 2 Beta Candidate before pre-release modifications -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/tarballs/vimoutliner-0.3.2.tar.gz,v -Working file: tarballs/vimoutliner-0.3.2.tar.gz -head: 1.1 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 1; selected revisions: 1 -description: ----------------------------- -revision 1.1 -date: 2004-02-23 12:34:28 +0000; author: noel; state: Exp; -Adding for posterity's sake. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/tarballs/vimoutliner-0.3.2a.tar.gz,v -Working file: tarballs/vimoutliner-0.3.2a.tar.gz -head: 1.1 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 1; selected revisions: 1 -description: ----------------------------- -revision 1.1 -date: 2004-02-23 12:34:28 +0000; author: noel; state: Exp; -Adding for posterity's sake. -============================================================================= - -RCS file: /root/VimOutliner/VimOutliner/tarballs/vimoutliner.0.3.1.tgz,v -Working file: tarballs/vimoutliner.0.3.1.tgz -head: 1.1 -branch: -locks: strict -access list: -symbolic names: -keyword substitution: kv -total revisions: 1; selected revisions: 1 -description: ----------------------------- -revision 1.1 -date: 2003-10-17 02:21:28 +0000; author: noel; state: Exp; -Official version 0.3.1 -============================================================================= - -" vim600: set noet ts=8 sw=8 sts=8 tw=78: diff --git a/pack/acp/start/vimoutliner/INSTALL b/pack/acp/start/vimoutliner/INSTALL deleted file mode 100644 index c3e71c8..0000000 --- a/pack/acp/start/vimoutliner/INSTALL +++ /dev/null @@ -1,137 +0,0 @@ -Installing and Testing VimOutliner - - - Automatic Method |vo-auto-install| - Updating |vo-updating| - Manual Method |vo-manual-install| - Testing |vo-testing| - - -Automatic Method - -The automatic installation targets Unix-compatible platforms: - -From tar archive - - $ tar xzvf vimoutliner-0.3.x.tar.gz - $ cd vimoutliner - $ sh install.sh - -From zip archive - - $ unzip vimoutliner-0.3.x.zip - $ cd vimoutliner-0.3.x - $ sh install.sh - -Installing with pathogen - -If you have pathogen installed as your package manager you can clone the git repository in you -pathogen directory: - $ cd ~/.vim/bundle && git clone https://github.com/vimoutliner/vimoutliner.git - -Installing using install.sh: - -First you can decide whether to install the VimOutliner files or abort the -process leaving everything unchanged. Assuming you confirmed the -installation, the script creates the necessary directory tree and copies the -files which provide the core functionality and documentation. - -With the second question you decide whether you want to install some brand new -add-ons, currently implementing checkboxes(enabled), hoisting(disabled) -and smart paste(disabled), as well as several useful external scripts in the vimoutliner/scripts folder. - - -Updating - -Updating an existing installation might require some manual work. - -If you are already working with a previous VimOutliner release, there is a -slight chance that the current directory tree is different from your current -one. In this case, you will have to manually migrate your files to the new -locations. - -The installation script creates unique backups of files being replaced with -newer versions. So if you put some local customisations into, say -$HOME/.vim/vimoutliner/vimoutlinerrc, you'll probably have to merge the backup -with the new file by hand. - - -Manual Method - -You can also copy the files from the unpacked distribution tarball into their -destination folders by yourself. The following steps are a description of what -has to go where and assume some knowledge of your vim setup. - -If you encounter problems, please contact the mailing list for an immediate -solution and more complete future documentation. www.lists.vimoutliner.org - -If you want to setup VimOutliner on a system running Microsoft Windows, the -directory $HOME denotes the base folder of the vim installation. If you're on -Unix based system, $HOME is as usual. - -You need the following sub trees in your $HOME directory: - - $HOME/.vim/ - doc/ - ftdetect/ - ftplugin/ - syntax/ - vimoutliner/ - plugins/ - scripts/ - -The distribution tarball unpacks into a directory vimoutliner with the -following contents: - - vimoutliner/ - plugins/ (1) - scripts/ (1) - doc/ (1) - ftdetect/ (1) - ftplugin/ (1) - install.sh* - syntax/ (1) - syntax/ (1) - vimoutlinerrc (1) - -(1) The content of these folders should be copied to their namesakes in the -$HOME/.vim folder - -Your $HOME/.vimrc file should contain the lines - - filetype plugin indent on - syntax on - -Finally, you need to integrate the online help provided with VimOutliner into -the vim help system. Start vim and execute the following command: - - :helptags $HOME/.vim/doc - -At this point, VimOutliner should be functional. Type ":help vo" to get -started. To get a quick overview of all VimOutliner commands you can view the -cheatsheet with ":help votl_cheatsheet". - -Testing Base Functionality - -Create a text file and save it as a .otl file like vo_test.otl. Enter -some text and verify the following: -- Tabs indent the text -- Different indent levels are different colors -- Lines starting with a colon and space word-wrap - -Lines starting with colons are body text. They should word wrap and -should be a special color (typically green, but it can vary). Verify -that paragraphs of body text can be reformatted with the Vim gq -commands. - -You can test the different VimOutliner commands by looking at the examples -in the cheatsheet. "help votl_cheatsheet". - -Debian Installation - -Debian does include VimOutliner as a package. However some Debian versions -require this line to be added to your .vimrc file: - - syntax on - - diff --git a/pack/acp/start/vimoutliner/LICENSE b/pack/acp/start/vimoutliner/LICENSE deleted file mode 100644 index e260844..0000000 --- a/pack/acp/start/vimoutliner/LICENSE +++ /dev/null @@ -1,11 +0,0 @@ -LICENSE - - VimOutliner - Copyright (C) 2001, 2003 by Steve Litt - Copyright (C) 2004 by Noel Henson - Licensed under the GNU General Public License (GPL), version 3 - Absolutely no warranty. - - If your distro doesn't come with the GPL file you can find it here: - HTML: http://www.gnu.org/copyleft/gpl.html - Text: http://www.gnu.org/copyleft/gpl.txt diff --git a/pack/acp/start/vimoutliner/README b/pack/acp/start/vimoutliner/README deleted file mode 100644 index addfde3..0000000 --- a/pack/acp/start/vimoutliner/README +++ /dev/null @@ -1,81 +0,0 @@ - -VimOutliner README file - -Introduction - -VimOutliner is an outline processor with many of the same features -as Grandview, More, Thinktank, Ecco, etc. Features include tree -expand/collapse, tree promotion/demotion, level sensitive colors, -interoutline linking, and body text. - -What sets VimOutliner apart from the rest is that it's been constructed -from the ground up for fast and easy authoring. Keystrokes are quick and -easy, especially for someone knowing the Vim editor. VimOutliner can be -used without the mouse (but is supported to the extent that Vim supports -the mouse). - -Many of the VimOutliner commands start with a double comma ",," because -that's very quick to type. All VimOutliner files have the ".otl" -extension. For help on VimOutliner type ":h vo". For an overview of -all the most important VimOutliner commands you can type ":h votl_cheatsheet" -when you have opened an otl file. - - -* Usage - -VimOutliner has been reported to help with the following tasks: - - - Project management - - Password wallet - - To-do lists - - Account and cash book - - 'Plot device' for writing novels - - Inventory control - - Hierarchical database - - Web site management - -* Characteristics - - - Fast and effective - - Fully integrated with Vim - - Extensible through plugins - - Many post-processing scripts allow exporting to multiple formats - - Extensive documentation - -For more information on the use of VimOutliner see the README.detailed -file in this directory. - - -Installation details - -1. Zip file - -To install from the zip file do the following (exchange "x" with -version number from the package you have downloaded): - -$ unzip vimoutliner-0.3.x.zip $ cd vimoutliner-0.3.x $ sh install.sh - -2. Gzip archive - -To install from the gzip archive follow these steps: - -$ tar -xzvf vimoutliner-0.3.x.tgz $ cd vimoutliner-0.3.x $ sh install.sh - -Downloads - -zip archives are available here: - -https://github.com/vimoutliner/vimoutliner/downloads - -Download of all packages can also be done from the Freshmeat site: - -http://freecode.com/projects/vimoutliner - -For more detailed installation instructions see the INSTALL file in -this directory. - - - - - - diff --git a/pack/acp/start/vimoutliner/README.detailed b/pack/acp/start/vimoutliner/README.detailed deleted file mode 120000 index 5b34fec..0000000 --- a/pack/acp/start/vimoutliner/README.detailed +++ /dev/null @@ -1 +0,0 @@ -doc/votl.txt \ No newline at end of file diff --git a/pack/acp/start/vimoutliner/TODO.otl b/pack/acp/start/vimoutliner/TODO.otl deleted file mode 100644 index 933fa04..0000000 --- a/pack/acp/start/vimoutliner/TODO.otl +++ /dev/null @@ -1,27 +0,0 @@ -TODO LIST - Updated: 20140916 - :This is just a preliminary roadmap, use the issue list at - :https://github.com/vimoutliner/vimoutliner/issues for suggesting new - :features and register issues or bugs - -Work planned for next version: - Cleanup code in plugins to more efficient vim script - Make plug mappings for all commands - Decide on common script language, and write scripts in new language - -Maybe/probably: - Include a list of vim plugins that are useful with VimOutliner - Templates - More sort functionality - Wiki plugin and documentation - Documentation on how to convert VO files to mindmap programs, Grapviz and Lyx - More colorschemes - vimoutliner-tutor - Documentation on how to use VO for writing - MetaData? - -Done: - Remove included RCS,logs etc. - - - diff --git a/pack/acp/start/vimoutliner/colors/votl_dark.vim b/pack/acp/start/vimoutliner/colors/votl_dark.vim deleted file mode 100644 index a5d9868..0000000 --- a/pack/acp/start/vimoutliner/colors/votl_dark.vim +++ /dev/null @@ -1,81 +0,0 @@ -let g:colors_name="VO Dark" -hi normal guifg=white guibg=black ctermfg=gray ctermbg=black -hi StatusLine guifg=white guibg=black ctermfg=gray ctermbg=black -hi StatusLineNC guifg=white guibg=black ctermfg=gray ctermbg=black -hi VertSplit guifg=white guibg=black ctermfg=gray ctermbg=black -hi OL1 guifg=white ctermfg=gray -hi OL2 guifg=red ctermfg=darkred -hi OL3 guifg=lightblue ctermfg=darkblue -hi OL4 guifg=violet ctermfg=darkmagenta -hi OL5 guifg=white ctermfg=gray -hi OL6 guifg=red ctermfg=darkred -hi OL7 guifg=lightblue ctermfg=darkblue -hi OL8 guifg=violet ctermfg=darkmagenta -hi OL9 guifg=white ctermfg=gray - -" colors for tags -hi outlTags guifg=darkred ctermfg=darkred - -" color for body text -hi BT1 guifg=green ctermfg=darkgreen -hi BT2 guifg=green ctermfg=darkgreen -hi BT3 guifg=green ctermfg=darkgreen -hi BT4 guifg=green ctermfg=darkgreen -hi BT5 guifg=green ctermfg=darkgreen -hi BT6 guifg=green ctermfg=darkgreen -hi BT7 guifg=green ctermfg=darkgreen -hi BT8 guifg=green ctermfg=darkgreen -hi BT9 guifg=green ctermfg=darkgreen - -" color for pre-formatted text -hi PT1 guifg=blue ctermfg=darkcyan -hi PT2 guifg=blue ctermfg=darkcyan -hi PT3 guifg=blue ctermfg=darkcyan -hi PT4 guifg=blue ctermfg=darkcyan -hi PT5 guifg=blue ctermfg=darkcyan -hi PT6 guifg=blue ctermfg=darkcyan -hi PT7 guifg=blue ctermfg=darkcyan -hi PT8 guifg=blue ctermfg=darkcyan -hi PT9 guifg=blue ctermfg=darkcyan - -" color for tables -hi TA1 guifg=darkviolet ctermfg=darkcyan -hi TA2 guifg=darkviolet ctermfg=darkcyan -hi TA3 guifg=darkviolet ctermfg=darkcyan -hi TA4 guifg=darkviolet ctermfg=darkcyan -hi TA5 guifg=darkviolet ctermfg=darkcyan -hi TA6 guifg=darkviolet ctermfg=darkcyan -hi TA7 guifg=darkviolet ctermfg=darkcyan -hi TA8 guifg=darkviolet ctermfg=darkcyan -hi TA9 guifg=darkviolet ctermfg=darkcyan - -" color for user text (wrapping) -hi UT1 guifg=darkred ctermfg=darkcyan -hi UT2 guifg=darkred ctermfg=darkcyan -hi UT3 guifg=darkred ctermfg=darkcyan -hi UT4 guifg=darkred ctermfg=darkcyan -hi UT5 guifg=darkred ctermfg=darkcyan -hi UT6 guifg=darkred ctermfg=darkcyan -hi UT7 guifg=darkred ctermfg=darkcyan -hi UT8 guifg=darkred ctermfg=darkcyan -hi UT9 guifg=darkred ctermfg=darkcyan - -" color for user text (non-wrapping) -hi UB1 guifg=darkgray ctermfg=darkcyan -hi UB2 guifg=darkgray ctermfg=darkcyan -hi UB3 guifg=darkgray ctermfg=darkcyan -hi UB4 guifg=darkgray ctermfg=darkcyan -hi UB5 guifg=darkgray ctermfg=darkcyan -hi UB6 guifg=darkgray ctermfg=darkcyan -hi UB7 guifg=darkgray ctermfg=darkcyan -hi UB8 guifg=darkgray ctermfg=darkcyan -hi UB9 guifg=darkgray ctermfg=darkcyan - -" colors for folded sections -hi Folded guifg=darkcyan guibg=bg ctermfg=darkcyan ctermbg=black -hi FoldColumn guifg=darkcyan guibg=bg ctermfg=darkcyan ctermbg=black - -" colors for experimental spelling error highlighting -" this only works for spellfix.vim with will be cease to exist soon -hi spellErr gui=underline guifg=yellow cterm=underline ctermfg=darkyellow -hi BadWord gui=underline guifg=yellow cterm=underline ctermfg=darkyellow diff --git a/pack/acp/start/vimoutliner/colors/votl_light.vim b/pack/acp/start/vimoutliner/colors/votl_light.vim deleted file mode 100644 index beef395..0000000 --- a/pack/acp/start/vimoutliner/colors/votl_light.vim +++ /dev/null @@ -1,81 +0,0 @@ -let g:colors_name="VO Light" -hi normal guifg=black guibg=white ctermfg=white ctermbg=black -hi StatusLine guifg=black guibg=white ctermfg=white ctermbg=black -hi StatusLineNC guifg=black guibg=white ctermfg=white ctermbg=black -hi VertSplit guifg=black guibg=white ctermfg=white ctermbg=black -hi OL1 guifg=black ctermfg=black -hi OL2 guifg=red ctermfg=red -hi OL3 guifg=blue ctermfg=blue -hi OL4 guifg=darkviolet ctermfg=magenta -hi OL5 guifg=black ctermfg=black -hi OL6 guifg=red ctermfg=red -hi OL7 guifg=blue ctermfg=blue -hi OL8 guifg=darkviolet ctermfg=magenta -hi OL9 guifg=black ctermfg=black - -" colors for tags -hi outlTags guifg=darkred ctermfg=darkred - -" color for body text -hi BT1 guifg=darkgreen ctermfg=green -hi BT2 guifg=darkgreen ctermfg=green -hi BT3 guifg=darkgreen ctermfg=green -hi BT4 guifg=darkgreen ctermfg=green -hi BT5 guifg=darkgreen ctermfg=green -hi BT6 guifg=darkgreen ctermfg=green -hi BT7 guifg=darkgreen ctermfg=green -hi BT8 guifg=darkgreen ctermfg=green -hi BT9 guifg=darkgreen ctermfg=green - -" color for pre-formatted text -hi PT1 guifg=darkblue ctermfg=cyan -hi PT2 guifg=darkblue ctermfg=cyan -hi PT3 guifg=darkblue ctermfg=cyan -hi PT4 guifg=darkblue ctermfg=cyan -hi PT5 guifg=darkblue ctermfg=cyan -hi PT6 guifg=darkblue ctermfg=cyan -hi PT7 guifg=darkblue ctermfg=cyan -hi PT8 guifg=darkblue ctermfg=cyan -hi PT9 guifg=darkblue ctermfg=cyan - -" color for tables -hi TA1 guifg=darkviolet ctermfg=cyan -hi TA2 guifg=darkviolet ctermfg=cyan -hi TA3 guifg=darkviolet ctermfg=cyan -hi TA4 guifg=darkviolet ctermfg=cyan -hi TA5 guifg=darkviolet ctermfg=cyan -hi TA6 guifg=darkviolet ctermfg=cyan -hi TA7 guifg=darkviolet ctermfg=cyan -hi TA8 guifg=darkviolet ctermfg=cyan -hi TA9 guifg=darkviolet ctermfg=cyan - -" color for user text (wrapping) -hi UT1 guifg=darkred ctermfg=cyan -hi UT2 guifg=darkred ctermfg=cyan -hi UT3 guifg=darkred ctermfg=cyan -hi UT4 guifg=darkred ctermfg=cyan -hi UT5 guifg=darkred ctermfg=cyan -hi UT6 guifg=darkred ctermfg=cyan -hi UT7 guifg=darkred ctermfg=cyan -hi UT8 guifg=darkred ctermfg=cyan -hi UT9 guifg=darkred ctermfg=cyan - -" color for user text (non-wrapping) -hi UB1 guifg=darkgray ctermfg=cyan -hi UB2 guifg=darkgray ctermfg=cyan -hi UB3 guifg=darkgray ctermfg=cyan -hi UB4 guifg=darkgray ctermfg=cyan -hi UB5 guifg=darkgray ctermfg=cyan -hi UB6 guifg=darkgray ctermfg=cyan -hi UB7 guifg=darkgray ctermfg=cyan -hi UB8 guifg=darkgray ctermfg=cyan -hi UB9 guifg=darkgray ctermfg=cyan - -" colors for folded sections -hi Folded guifg=darkcyan guibg=bg ctermfg=cyan ctermbg=white -hi FoldColumn guifg=darkcyan guibg=bg ctermfg=cyan ctermbg=white - -" colors for experimental spelling error highlighting -" this only works for spellfix.vim with will be cease to exist soon -hi spellErr gui=underline guifg=darkred cterm=underline ctermfg=darkred -hi BadWord gui=underline guifg=darkred cterm=underline ctermfg=darkred diff --git a/pack/acp/start/vimoutliner/colors/votl_test.vim b/pack/acp/start/vimoutliner/colors/votl_test.vim deleted file mode 100644 index 9866ace..0000000 --- a/pack/acp/start/vimoutliner/colors/votl_test.vim +++ /dev/null @@ -1,81 +0,0 @@ -let g:colors_name="VO Light" -hi normal guifg=black guibg=white ctermfg=white ctermbg=black -hi StatusLine guifg=black guibg=white ctermfg=white ctermbg=black -hi StatusLineNC guifg=black guibg=white ctermfg=white ctermbg=black -hi VertSplit guifg=black guibg=white ctermfg=white ctermbg=black -hi OL1 guifg=black ctermfg=black -hi OL2 guifg=red ctermfg=red -hi OL3 guifg=blue ctermfg=blue -hi OL4 guifg=darkviolet ctermfg=magenta -hi OL5 guifg=black ctermfg=black -hi OL6 guifg=red ctermfg=red -hi OL7 guifg=blue ctermfg=blue -hi OL8 guifg=darkviolet ctermfg=magenta -hi OL9 guifg=black ctermfg=black - -" colors for tags -hi outlTags guifg=darkred ctermfg=darkred - -" color for body text -hi BT1 guifg=darkviolet ctermfg=magenta -hi BT2 guifg=black ctermfg=black -hi BT3 guifg=red ctermfg=red -hi BT4 guifg=blue ctermfg=blue -hi BT5 guifg=darkviolet ctermfg=magenta -hi BT6 guifg=black ctermfg=black -hi BT7 guifg=red ctermfg=red -hi BT8 guifg=blue ctermfg=blue -hi BT9 guifg=darkviolet ctermfg=magenta - -" color for pre-formatted text -hi PT1 guifg=darkblue ctermfg=cyan -hi PT2 guifg=darkblue ctermfg=cyan -hi PT3 guifg=darkblue ctermfg=cyan -hi PT4 guifg=darkblue ctermfg=cyan -hi PT5 guifg=darkblue ctermfg=cyan -hi PT6 guifg=darkblue ctermfg=cyan -hi PT7 guifg=darkblue ctermfg=cyan -hi PT8 guifg=darkblue ctermfg=cyan -hi PT9 guifg=darkblue ctermfg=cyan - -" color for tables -hi TA1 guifg=darkviolet ctermfg=cyan -hi TA2 guifg=darkviolet ctermfg=cyan -hi TA3 guifg=darkviolet ctermfg=cyan -hi TA4 guifg=darkviolet ctermfg=cyan -hi TA5 guifg=darkviolet ctermfg=cyan -hi TA6 guifg=darkviolet ctermfg=cyan -hi TA7 guifg=darkviolet ctermfg=cyan -hi TA8 guifg=darkviolet ctermfg=cyan -hi TA9 guifg=darkviolet ctermfg=cyan - -" color for user text (wrapping) -hi UT1 guifg=darkred ctermfg=cyan -hi UT2 guifg=darkred ctermfg=cyan -hi UT3 guifg=darkred ctermfg=cyan -hi UT4 guifg=darkred ctermfg=cyan -hi UT5 guifg=darkred ctermfg=cyan -hi UT6 guifg=darkred ctermfg=cyan -hi UT7 guifg=darkred ctermfg=cyan -hi UT8 guifg=darkred ctermfg=cyan -hi UT9 guifg=darkred ctermfg=cyan - -" color for user text (non-wrapping) -hi UB1 guifg=darkgray ctermfg=cyan -hi UB2 guifg=darkgray ctermfg=cyan -hi UB3 guifg=darkgray ctermfg=cyan -hi UB4 guifg=darkgray ctermfg=cyan -hi UB5 guifg=darkgray ctermfg=cyan -hi UB6 guifg=darkgray ctermfg=cyan -hi UB7 guifg=darkgray ctermfg=cyan -hi UB8 guifg=darkgray ctermfg=cyan -hi UB9 guifg=darkgray ctermfg=cyan - -" colors for folded sections -hi Folded guifg=darkcyan guibg=bg ctermfg=cyan ctermbg=white -hi FoldColumn guifg=darkcyan guibg=bg ctermfg=cyan ctermbg=white - -" colors for experimental spelling error highlighting -" this only works for spellfix.vim with will be cease to exist soon -hi spellErr gui=underline guifg=darkred cterm=underline ctermfg=darkred -hi BadWord gui=underline guifg=darkred cterm=underline ctermfg=darkred diff --git a/pack/acp/start/vimoutliner/doc/votl.txt b/pack/acp/start/vimoutliner/doc/votl.txt deleted file mode 100644 index 38671d7..0000000 --- a/pack/acp/start/vimoutliner/doc/votl.txt +++ /dev/null @@ -1,1331 +0,0 @@ -*votl_readme.txt* For Vim version 7.2 Last change: 2014-09-28 - - *vo* *votl* *vimoutliner* -VimOutliner 0.4.0 ~ - -VimOutliner is an outline processor designed with lighting fast authoring as -the main feature, it also has many of the same features as Grandview, More, -Thinktank, Ecco, etc. These features include tree expand/collapse, tree -promotion/demotion, level sensitive colors, interoutline linking, checkboxes -and body text. - - - License |votl-license| - Version |votl-version| - Installing and testing VimOutliner |votl-install| - Install via Pathogen |votl-pathogen-install| - Legacy Script Driven Method |votl-auto-install| - Updating |votl-updating| - Manual method |votl-manual-install| - Testing |votl-testing| - Debian |votl-debian| - Using VimOutliner on other file types |votl-other-files| - Troubleshooting |votl-troubleshooting| - VimOutliner philosophy |votl-philosophy| - Running VimOutliner |votl-running| - VimOutliner configuration file |vimoutlinerrc| - Comma comma commands |votl-command| - Basic VimOutliner activities |votl-activities| - Menu |votl-menu| - Vim Outliner objects |votl-objects| - Post Processors |votl-post-processors| - Advanced |votl-advanced| - Executable Lines |votl-executable-lines| - Plugins |votl-plugins| - Checkboxes |votl-checkbox| - Hoisting |votl-hoisting| - Clock |votl-clock| - Scripts |votl-scripts| - votl_maketags.pl |votl-maketags| - otl2html.py |otl2html| - Other information |votl-other-info| - - -============================================================================== -License *votl-license* - - -VimOutliner Copyright (C) 2001, 2003 by Steve Litt - Copyright (C) 2004, 2014 by Noel Henson -Licensed under the GNU General Public License (GPL), version 2 -Absolutely no warranty, see COPYING file for details. - - HTML: http://www.gnu.org/copyleft/gpl.html - Text: http://www.gnu.org/copyleft/gpl.txt - - -============================================================================== -Installing and Testing VimOutliner *votl-install* - - - Install via Pathogen |votl-pathogen-install| - Legacy Script Driven Method |votl-auto-install| - Updating |votl-updating| - Manual Method |votl-manual-install| - Testing |votl-testing| - - *votl-pathogen-install* -Install via Pathogen~ - -Preferred and most simple method of VimOutliner installation is using -Pathogen (developers of VimOutliner actually believe that Pathogen -(https://github.com/tpope/vim-pathogen), or Vundle, should be generally -the preferred way of installation of any vim plugin). - -Installation with working Pathogen should be just - - $ cd ~/.vim/bundle - # Or even better is to have whole ~/.vim/bundle as a separate repo - # and then plugins are added as submodules. - $ git clone git@github.com:vimoutliner/vimoutliner.git - -Restart vim and you should be good to go. If something does not€™t work, -please, let us know (either on the email list or file a ticket to the -GitHub issue tracker). - - *votl-auto-install* -Legacy Script Driven Method~ - -The automatic installation targets Unix-compatible platforms: > - -From tar archive - - $ tar xzvf vimoutliner-0.3.x.tar.gz - $ cd vimoutliner - $ sh install.sh - -From zip archive - - $ unzip vimoutliner-0.3.x.zip - $ cd vimoutliner-0.3.x - $ sh install.sh - -< -The install.sh script will ask you whether to install the VimOutliner files or -abort the process leaving everything unchanged. Assuming you confirmed the -installation, the script creates the necessary directory tree and copies the -files which provide the core functionality and documentation. - -With the second question you decide whether you want to install some brand new -add-ons, currently implementing hoisting and checkboxes. - - *votl-updating* -Updating~ - -Updating an existing installation might require some manual work. - -If you are already working with a previous VimOutliner release, there is a -slight chance that the current directory tree is different from your current -one. In this case, you will have to manually migrate your files to the new -locations. - -The installation script creates unique backups of files being replaced -with newer versions. So if you put some local customizations into -vimoutlinerrc in the directory where VimOutliner is run from (say -$HOME/.vim/vimoutliner/vimoutlinerrc), you'll probably have to merge the -backup with the new file by hand. Which is one good reason why it is -preferred to use for the custom configuration and extensions your own -copy of the |vimoutlinerrc| in some other location where the file is -sought for. - - *votl-manual-install* -Manual Method~ - -You can also copy the files from the unpacked distribution tar ball into their -destination folders by yourself. The following steps are a description of what -has to go where and assume some knowledge of your vim setup. - -If you encounter problems, please contact the mailing list for an immediate -solution and more complete future documentation. -https://groups.google.com/forum/#!forum/vimoutliner - -If you want to setup VimOutliner on a system running Microsoft Windows, the -directory $HOME denotes the base folder of the vim installation. If you're on -Unix based system, the location of $HOME is as usual. - -You need the following subtrees in your $HOME directory: > - - $HOME/.vim/ - doc/ - ftdetect/ - ftplugin/ - syntax/ - vimoutliner/ - plugins/ - scripts/ -< -The distribution tar ball unpacks into a directory vimoutliner with the -following contents: > - - vimoutliner/ - plugins/ (1) - scripts/ (1) - doc/ (1) - ftdetect/ (1) - ftplugin/ (1) - install.sh* - syntax/ (1) - syntax/ (1) - vimoutlinerrc (1) -< -(1) The content of these folders should be copied to their namesakes in the -$HOME/.vim folder - -Your $HOME/.vimrc file should contain the lines > - - filetype plugin indent on - syntax on -< -Finally, you need to integrate the online help provided with VimOutliner into -the vim help system. Start vim and execute the following command: > -> - :helptags $HOME/.vim/doc -< -At this point, VimOutliner should be functional. Type ":help vo" to get -started. You can also type ":help votl_cheatsheet" to a get a quick overview -of all the VimOutliner commands. - - *votl-testing* -Testing Base Functionality~ - -Open a new outline with the following: -> - rm $HOME/votl_test.otl - gvim $HOME/votl_test.otl or vim $HOME/votl_test.otl -< -Verify the following: -- Tabs indent the text -- Different indent levels are different colors -- Lines starting with a colon and space word-wrap - - Lines starting with colons are body text. They should word wrap and - should be a special color (typically green, but it can vary). Verify - that paragraphs of body text can be reformatted with the Vim gq - commands. - -Verify Interoutline Linking: - -Interoutline linking currently requires a working perl installation to -generate the necessary tag file. We are looking into porting this to vim's own -scripting language. - -Place the following two lines in $HOME/votl_test.otl: -> - _tag_newfile - $HOME/votl_newfile.otl -< -Note that in the preceding, the 2nd line should be indented from the first. - -To create VimOutliner's tag file $HOME/.vim/vimoutliner/votl_tags.tag, run -votl_maketags.pl, which resides in $HOME/.vimoutliner/scripts/: $ -$HOME/.vim/vimoutliner/scripts/votl_maketags.pl $HOME/votl_test.otl - -Try the following: -- In $HOME/votl_test.otl -- Cursor to the _tag_newfile marker -- Press CTRL-K - You should be brought to $HOME/votl_newfile.otl -- Press CTRL-N - You should be brought back to $HOME/votl_test.otl -Note: - CTRL-K is a VimOutliner synonym for CTRL-] - CTRL-N is a VimOutliner synonym for CTRL-T - -This might also be achieved more efficiently by using the UTL plugin for -linking to other files and text. Check out the plugin at: - -http://www.vim.org/scripts/script.php?script_id=293 - - *votl-debian* -Debian Installation~ - -Debian does include Vim Outliner as a package. However some Debian version -require this line to be added to your |vimrc| file: > - - syntax on -> - -============================================================================== -Using VimOutliner On Other File Types~ *votl-other-files* - -How to use VimOutliner on non .otl files~ - -Previous VimOutliner versions used the ol script to invoke VimOutliner. As of -VimOutliner 0.3.0, the ol script is no longer necessary nor provided. Instead, -VimOutliner is now a Vim plugin, so Vim does all the work. - -This makes VimOutliner much simpler to use in most cases, but Vim plugins are -file extension based, meaning that if you want to use VimOutliner on a file -extension other than .otl, you must declare that file extension in -$HOME/.vim/ftdetect/votl.vim. In this section we'll use the .emdl extension -(Easy Menu Definition Language) as an example. - -To enable VimOutliner work with .emdl files, do this: -> - vim $HOME/.vim/ftdetect/votl.vim -< -Right below the line reading: -> - au! BufRead,BufNewFile *.otl setfiletype votl -< -Insert the following line: -> - au! BufRead,BufNewFile *.emdl setfiletype votl -< -Save and exit -> - gvim $HOME/votl_test.emdl -< -You should get: -- level colors, -- body text (lines starting with colon) -- comma comma commands (try ,,2 and ,,1) - - -============================================================================== -Troubleshooting~ *votl-troubleshooting* - - -Q: I can't switch between colon based and space based body text. -A: See next question - -Q: My ,,b and ,,B don't do anything. How do I fix it? -A: Open vim like this: -> - vim $HOME/.vim/ftplugin/votl.vim -< - Search for use_space_colon - Make sure it is set to 0, not 1 - Rerun Vim, and ,,b and ,,B should work - -Q: I don't get VimOutliner features on files of extension .whatever. -A: Open vim like this: -> - vim $HOME/.vim/ftdetect/votl.vim -< - Right below the line reading: -> - au! BufRead,BufNewFile *.otl setfiletype votl -< - Insert the following line: -> - au! BufRead,BufNewFile *.whatever setfiletype votl -< - Save and exit. - - -============================================================================== -VimOutliner Philosophy~ *votl-philosophy* - - -Authoring Speed~ - -VimOutliner is an outline processor with many of the same features as -Grandview, More, Thinktank, Ecco, etc. Features include tree expand/collapse, -tree promotion/demotion, level sensitive colors, interoutline linking, and -body text. - -What sets VimOutliner apart from the rest is that it's been constructed from -the ground up for fast and easy authoring. Keystrokes are quick and easy, -especially for someone knowing the Vim editor. The mouse is completely -unnecessary (but is supported to the extent that Vim supports the mouse). Many -of the VimOutliner commands start with a double comma because that's very -quick to type. - -Many outliners are prettier than VimOutliner. Most other outliners are more -intuitive for the newbie not knowing Vim. Many outliners are more featureful -than VimOutliner (although VimOutliner gains features monthly and is already -very powerful). Some outliners are faster on lookup than VimOutliner. But as -far as we know, NO outliner is faster at getting information out of your mind -and into an outline than VimOutliner. - -VimOutliner will always give you lightning fast authoring. That's our basic, -underlying philosophy, and will never change, no matter what features are -added. - - -Vim Integration~ - -Earlier VimOutliner versions prided themselves on being stand alone -applications, self-contained in a single directory with a special script to -run everything. - -As of 0.3.0, VimOutliner is packaged as a Vim Plugin, eliminating the need for -the ol script, which many saw as clumsy. Given that all VimOutliner features -are produced by the Vim engine, it makes perfect sense to admit that -VimOutliner is an add-on to Vim. - -Therefore VimOutliner now prides itself in being a Vim plugin. With the -VimOutliner package installed, the Vim editor yields the VimOutliner feature -set for files whose extensions are listed as votl types in -$HOME/.vim/ftplugin/votl.vim. - - -============================================================================== -Running VimOutliner~ *votl-running* - - -Vim Knowledge~ - -You needn't be a Vim expert to use VimOutliner. If you know the basics -- -inserting and deleting line-wise and character-wise, moving between command and -insert modes, use of Visual Mode selections,and reformatting, you should be -well equipped to use VimOutliner. - -Run Vim or GVim and follow the instruction on :help |tutor| - -VimOutliner is a set of Vim scripts and configurations. Its features all come -from the Vim editor's engine. If you do not know Vim, you'll need to learn the -Vim basics before using VimOutliner. Start by taking the Vim tutorial. The -tutorial should take about 2 hours. - -VimOutliner is so fast, that if you often use outlining, you'll make up that -time within a week. - - *vimoutlinerrc* -VimOutliner configuration file~ - -Custom configuration (and small custom extensions) should be written to -the vimoutlinerrc file. It is a regular vimscript file and the first of -the files searched in the following locations will be used: - - * a file .vimoutlinerrc (notice the leading dot) in the users $HOME or - $HOME/.vimoutliner directory - * a file vimoutlinerrc (name without the leading dot) in the users - $HOME, $HOME/.vimoutliner, or $HOME/.vim directory - * a file vimoutlinerrc (again without the leading dot) in the folder - where the VimOutliner is run from (that could be again $HOME/.vim - directory with manual installation or for example - $HOME/.vim/bundle/vimoutliner when using pathogen) - -Many global variables can be also set in the normal vim manner in the -user’s $VIMRC file. See general vim documentation for more details for -individual variables. - - *votl-command* -Comma Comma Commands~ - -Traditionally (meaning in terms of the VimOutliner traditions ;)) all -VimOutliner were features accessed through keyboard commands starting -with two commas. The double comma followed by a character is incredibly -fast to type. However, with more widespread use of the VimOutliner some -developers felt that all idiosyncrasies should be eliminated and -VimOutliner should behave as a normal vim plugin. Therefore now we -don’t redefine this command leader (as it is called in the Vim lingo) -and unless the user redefines it on her own (in |vimoutlinerrc|) it -defaults to backslash. If you configure VimOutliner to use different key -combination, you have to mentally replace it everywhere in this -documentation. - -If you are friend of the ancient regime©, then just uncomment the line in -|vimoutlinerrc| (see more about the locations where you should put it): - - "let maplocalleader = ',,' " uncomment for compatibility with - " previous versions of VO - -We expect to create more comma comma commands, so try not to create your own, -as they may clash with later comma comma commands. If you have an -exceptionally handy command, please report it to the VimOutliner list. Perhaps -others could benefit from it. - - Command List Description ~ - ,,D all VimOutliner reserved command - ,,H all reserved for manual de-hoisting (add-on) - ,,h all reserved for hoisting (add-on) - ,,1 all set foldlevel=0 - ,,2 all set foldlevel=1 - ,,3 all set foldlevel=2 - ,,4 all set foldlevel=3 - ,,5 all set foldlevel=4 - ,,6 all set foldlevel=5 - ,,7 all set foldlevel=6 - ,,8 all set foldlevel=7 - ,,9 all set foldlevel=8 - ,,0 all set foldlevel=99999 - ,,- all Draw dashed line - ,,f normal Directory listing of the current directory - ,,s normal Sort sub-tree under cursor ascending - ,,S normal Sort sub-tree under cursor descending - ,,t normal Append timestamp (HH:MM:SS) to heading - ,,T normal Pre-pend timestamp (HH:MM:SS) to heading - ,,T normal Pre-pend timestamp (HH:MM:SS) to heading - ,,t insert Insert timestamp (HH:MM:SS) at cursor - ,,d normal Append datestamp (YYYY-MM-DD) to heading - ,,d insert Insert datestamp (YYYY-MM-DD) at cursor - ,,D normal Pre-pend datestamp (YYYY-MM-DD) to heading - ,,B normal Make body text start with a space - ,,b normal Make body text start with a colon and space - ,,w insert Save changes and return to insert mode - ,,e normal Execute the executable tag line under cursor - - -Other VimOutliner Commands~ - -Naturally, almost all Vim commands work in VimOutliner. Additionally, -VimOutliner adds a few extra commands besides the comma comma commands -discussed previously. - -Command list: - CTRL-K Follow tag (Synonym for CTRL-]) - CTRL-N Return from tag (Synonym for CTRL-T) - Q Reformat (Synonym for gq) - - -To get a quick overview of all VimOutliner commands type ":help votl_cheatsheet" in vim. - - *votl-activities* -Basic VimOutliner activities~ - -How do I collapse a tree within command mode? - zc - (note: a full list of folding commands |fold-commands|) - -How do I expand a tree within command mode? - To expand one level: - zo - To expand all the way down - zO - -How do I demote a headline? - In command mode, >> - In insert mode at start of the line, press the Tab key - In insert mode within the headline, CTRL-T - -How do I promote a headline? - In command mode, << - In insert mode at start of the line, press the Backspace key - In insert mode within the headline, CTRL-D - -How do I promote or demote several consecutive headlines? - Highlight the lines with the V command - Press < to promote or > to demote. You can precede - the < or > with a count to promote or demote several levels - -How do I promote or demote an entire tree? - Collapse the tree - Use << or >> as appropriate - -How do I collapse an entire outline? - ,,1 - -How do I maximally expand an entire outline? - ,,0 - -How do I expand an outline down to the third level? - ,,3 - -How do I move a tree? - Use Vim's visual cut and paste - -How do I create body text? - Open a blank line below a headline - Start the line with a colon followed by a space - Continue to type. Your text will wrap - -How do I reformat body text? - Highlight (Shift+V) the body text to be reformatted - Use the gq command to reformat - -How do I reformat one paragraph of body text? - The safest way is highlighting. - DANGER! Other methods can reformat genuine headlines. - -How do I switch between colon based and space based body text? - ,,b for colon based, ,,B for space based - -What if ,,b and ,,B don't work - Change variable use_space_colon from 1 to 0 - in $HOME/.vim/ftplugin/votl.vim - -How do I perform a word count? - Use the command :w !wc - The space before the exclamation point is a MUST. - - *votl-menu* -Menu~ - -There is a simple menu included in Vim Outliner when running in GUI mode. -Named 'VO', you can usually find it right next to the 'Help' menu. There are -commands to change the fold level and select alternate color schemes. There is -also entries for common tools. - -The last tool item calls a shell script, 'myotl2html.sh'. This script should -be provided by the user and is not included in VO releases. A sample -myotl2html.sh script might look like this: -> - #!/bin/bash - otl2html.py -S pjtstat.css $1 > $HOME/public_html/$1.html -< -If you have several different types of reports you create regularly, you can -create your own menu entries. Just add lines like these to your -|vimoutlinerrc| file: > -> - amenu &VO.&Reports.&Big\ Project :!otl2html.py -S big.css % > %.html - amenu &VO.&Reports.&Hot\ List :!otl2html.py -S todo.css % > %.html - amenu &VO.&Reports.&Weekly :!otl2html.py -S weekly.css % > %.html -< -I'm sure you get the idea. - - *votl-objects* -Vim Outliner Objects~ - -There are several object/line types that VO supports. The most common on -simple headings and body text. Simple headings are tab-indented line that -start with any non-whitespace character except: : ; | < >. These characters -specify other objects. Here is a list of each of the non-heading types: - - Start Description~ - : body text (wrapping) - ; Pre-formatted body text (non-wrapping) - | table - > user-defined, text block (wrapping) - < user-defined, Pre-formatted text block (non-wrapping) - -The body text marker, :, is used to specify lines that are automatically -wrapped and reformatted. VO and post-processors are free to wrap and reformat -this text as well as use proportionally- spaced fonts. A post-processor will -probably change the appearance of what you have written. If you are writing a -book or other document, most of the information you enter will be body text. - -Here is an example: -> - Kirby the Wonder Dog - : Kirby is nine years old. He understand about 70-100 - : English words. Kirby also understands 11 different hand - : signals. He is affectionate, playful and attentive. - : - : His breeding is unknown. He appears to be a mix between - : a German shepherd and a collie. -< -When folded, body text looks something like this: -> - Kirby the Wonder Dog - [TEXT] -------------------------------- (6 lines) -< -The Pre-formatted text marker, ;, is used to mark text that should not be -reformatted nor wrapped by VO or any post-processor. A post- processor would -use a fixed-space font, like courier, to render these lines. A post-processor -will probably not change the appearance of what you have written. This is -useful for making text picture, program code or other format-dependent text. - -Here is an example: -> - Output waveform - ; _______ ______ - ; _____/ \______________/ - ; |-10us--|----35us------| -< -When folded, Pre-formatted body text looks something like this: -> - Output waveform - [TEXT BLOCK] -------------------------- (6 lines) -< -The table marker, |, is used to create tables. This is an excellent way to -show tabular data. The marker is used as if it were are real vertical line. A -|| (double-|) is optionally used to mark a table heading line. This is useful -for post-processors. - -Here is an example: -> - Pets - || Name | Age | Animal | Inside/Outside | - | Kirby | 9 | dog | both | - | Hoover | 1 | dog | both | - | Sophia | 9 | cat | inside | -< -There is no automatic alignment of columns yet. It must be done manually. The -post-processor, otl2thml.py, does have alignment functions. See its -documentation for more information. - -When folded, a table looks something like this: -> - Pets - [TABLE] ------------------------------- (4 lines) -< -User-defined text is similar to body text but more flexible and it's use is -not pre-defined by Vim Outliner. The basic, user-defined text block marker, >, -behaves just like body text. - -For example: -> - Kirby the Wonder Dog - > Kirby is nine years old. He understand about 70-100 - > English words. Kirby also understands 11 different hand - > signals. He is affectionate, playful and attentive. - > - > His breeding is unknown. He appears to be a mix between - > a German shepherd and a collie. -< -When folded, body text looks something like this: -> - Kirby the Wonder Dog - [USER] -------------------------------- (6 lines) -< -But unlike body text, user-defined text can be expanded. You could have -user-defined text types. If you were writing a book, in addition to body text -for paragraphs you might need special paragraphs for tips and warnings. -User-defined text blocks can accomplish this: -> - >Tips - > Don't forget to back up your computer daily. You don't - > need to back up the entire computer. You just need to - > backup up the files that have changed. - >Warning - >Never store you backup floppy disks on the side of you - >file cabinets by adhering them with magnets. -< -A post processor will know how to remove the style tags (Tips and Warning) and -you want the text to be formatted. - -When folded, the above would appear as: -> - [USER Tips] --------------------------- (4 lines) - [USER Warning]------------------------- (3 lines) -< -The user-defined, pre-formatted text block marker, <, behaves just like -pre-formatted text. But like >, it leaves the functional definition up to the -user. A simple user-defined, pre-formatted text block could be: -> - Tux - < _.._ - < .-' `-. - < : ; - < ; ,_ _, ; - < : \{" "}/ : - < ,'.'"=..=''.'. - < ; / \ / \ ; - < .' ; '.__.' ; '. - < .-' .' '. '-. - < .' ; ; '. - < / / \ \ - < ; ; ; ; - < ; `-._ _.-' ; - < ; ""--. .--"" ; - < '. _ ; ; _ .' - < {""..' '._.-. .-._.' '..""} - < \ ; ; / - < : : : : - < : :.__.: : - < \ /"-..-"\ / fsc - < '-.__.' '.__.-' -< -When folded it would be: -> - Tux - [USER BLOCK] -------------------------- (6 lines) -< -Like user-defined text, these blocks can be given user-defined styles. For -example: -> - - [USER BLOCK ASCIIart] ----------------- (22 lines) - [USER BLOCK Code] --------------------- (17 lines) -< - - *votl-post-processors* -VimOutliner Post-Processors~ - -There are already several post processors for Vim Outliner. Some are general -purpose in nature and others perform specific conversions. There are several of -the tested scripts now included in the $HOME/.vim/vimoutliner/scripts folder. -See also the scripts section. |votl-scripts| - - -============================================================================== -Advanced VimOutliner *votl-advanced* - - *votl-executable-lines* -Executable Lines~ - -Executable lines enable you to launch any command from a specially constructed -headline within VimOutliner. The line must be constructed like this: -> - Description _exe_ command -< -Here's an example to pull up Troubleshooters.Com: -> - Troubleshooters.Com _exe_ mozilla http://www.troubleshooters.com -< -Executable lines offer the huge benefit of a single-source knowledge tree, -where all your knowledge, no matter what its format, exists within a single -tree of outlines connected with inter-outline links and executable lines. - -A more efficient and feature rich way to achieve this might be to use the UTL -plugin for vim. See the scripts section at http://www.vim.org - - -============================================================================== -Plugins *votl-plugins* - - -The VimOutliner distribution currently includes plugins for easy handling -of checkboxes, hoisting (see below), smart paste, clocking, math and format. - -The checkboxes tags and smart paste plugins are enabled by default. The -hoisting, clocking, math and format plugins are disabled by default. To -enable these plugins look for the easy instructions for this in your -|vimoutlinerrc| file. - -More information below and in the plugin files in the directory where -the VimOutliner is run from (either $HOME/.vim/vimoutliner/plugin for -manual installation or $HOME/.vim/bundle/vimoutliner/plugin when using -pathogen). - - *votl-checkbox* -Checkboxes~ - -Checkboxes enable VimOutliner to understand tasks and calculate the current -status of todo-lists etc. Three special notations are used: -> - [_] an unchecked item or incomplete task - [X] a checked item or complete task - % a placeholder for percentage of completion -< -Several ,,-commands make up the user interface: -> - ,,cb Insert a check box on the current line or each line of the currently - selected range (including lines in selected but closed folds). This - command is currently not aware of body text. Automatic recalculation - of is performed for the entire root-parent branch that contains the - updated child. (see ,,cz) - ,,cx Toggle check box state (percentage aware) - ,,cd Delete check boxes - ,,c% Create a check box with percentage placeholder except on childless - parents - ,,cp Create a check box with percentage placeholder on all headings - ,,cz Compute completion for the tree below the current heading. -< -How do I use it? - -Start with a simple example. Let's start planning a small party, say a barbecue. - -1. Make the initial outline. -> - Barbecue - Guests - Bill and Barb - Larry and Louise - Marty and Mary - Chris and Christine - David and Darla - Noel and Susan - Food - Chicken - Ribs - Corn on the cob - Salad - Desert - Beverages - Soda - Iced Tea - Beer - Party Favors - Squirt guns - Hats - Name tags - Materials - Paper Plates - Napkins - Trash Containers -< - -2. Add the check boxes. - -This can be done by visually selecting them and typing ,,cb. When done, you -should see this: -> - [_] Barbecue - [_] Guests - [_] Bill and Barb - [_] Larry and Louise - [_] Marty and Mary - [_] Chris and Christine - [_] David and Darla - [_] Noel and Susan - [_] Food - [_] Chicken - [_] Ribs - [_] Corn on the cob - [_] Salad - [_] Desert - [_] Beverages - [_] Soda - [_] Iced Tea - [_] Beer - [_] Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] Materials - [_] Paper Plates - [_] Napkins - [_] Trash Containers -< - -3. Now check off what's done. - -Checking off what is complete is easy with the -,,cx command. Just place the cursor on a heading and ,,cx it. Now you can see -what's done as long as the outline is fully expanded. -> - [_] Barbecue - [_] Guests - [X] Bill and Barb - [X] Larry and Louise - [X] Marty and Mary - [X] Chris and Christine - [X] David and Darla - [X] Noel and Susan - [_] Food - [X] Chicken - [X] Ribs - [_] Corn on the cob - [_] Salad - [X] Desert - [_] Beverages - [_] Soda - [X] Iced Tea - [X] Beer - [_] Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] Materials - [X] Paper Plates - [_] Napkins - [X] Trash Containers -< - -4. Now summarize what's done. - -You can summarize what is done with the ,,cz command. Place the cursor on the -'Barbecue' heading and ,,cz it. The command will recursively process the -outline and update the check boxes of the parent headlines. You should see: -(Note: the only change is on the 'Guests' heading. It changed because all of -its children are complete.) -> - [_] Barbecue - [X] Guests - [X] Bill and Barb - [X] Larry and Louise - [X] Marty and Mary - [X] Chris and Christine - [X] David and Darla - [X] Noel and Susan - [_] Food - [X] Chicken - [X] Ribs - [_] Corn on the cob - [_] Salad - [X] Desert - [_] Beverages - [_] Soda - [X] Iced Tea - [X] Beer - [_] Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] Materials - [X] Paper Plates - [_] Napkins - [X] Trash Containers -< - -5. Add percentages for a better view. - -You can get a much better view of what's going on, especially with collapsed -headings, if you add percentages. Place a % on each heading that has children -like this: -> - [_] % Barbecue - [X] % Guests - [X] Bill and Barb - [X] Larry and Louise - [X] Marty and Mary - [X] Chris and Christine - [X] David and Darla - [X] Noel and Susan - [_] % Food - [X] Chicken - [X] Ribs - [_] Corn on the cob - [_] Salad - [X] Desert - [_] % Beverages - [_] Soda - [X] Iced Tea - [X] Beer - [_] % Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] % Materials - [X] Paper Plates - [_] Napkins - [X] Trash Containers -< - -6. Now compute the percentage of completion. - -After adding the % symbols, place the cursor on the 'Barbecue' heading and -execute ,,cz as before. Keep in mind that the recursive percentages are -weighted. You should see: -> - [_] 58% Barbecue - [X] 100% Guests - [X] Bill and Barb - [X] Larry and Louise - [X] Marty and Mary - [X] Chris and Christine - [X] David and Darla - [X] Noel and Susan - [_] 60% Food - [X] Chicken - [X] Ribs - [_] Corn on the cob - [_] Salad - [X] Desert - [_] 66% Beverages - [_] Soda - [X] Iced Tea - [X] Beer - [_] 0% Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] 66% Materials - [X] Paper Plates - [_] Napkins - [X] Trash Containers -< - -7. Complete a few more just for fun. - -Mark Salad and Soda and you should see the outline below. Try playing around -with zc and zo to see the effects of opening and closing folds. Even if you -place the cursor on 'Barbecue' and zo it, you still have a good understanding -of how complete the project is. -> - [_] 69% Barbecue - [X] 100% Guests - [X] Bill and Barb - [X] Larry and Louise - [X] Marty and Mary - [X] Chris and Christine - [X] David and Darla - [X] Noel and Susan - [_] 80% Food - [X] Chicken - [X] Ribs - [_] Corn on the cob - [X] Salad - [X] Desert - [X] 100% Beverages - [X] Soda - [X] Iced Tea - [X] Beer - [_] 0% Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] 66% Materials - [X] Paper Plates - [_] Napkins - [X] Trash Containers -< - *votl-hoisting* -Hoisting~ - -Hoisting is a way to focus on the offspring of the currently selected outline -item. The sub items will be presented as top level items in the automatically -extracted hoist-file located in the same directory as the main outline file. -You cannot hoist parts of an already hoisted file again. - -To enable this plugin uncomment the following line in |vimoutlinerrc|: -> - "let g:vo_modules_load .= ':newhoist' -< -Once it is enabled, you hoist the subtopics of the currently selected -item with - - ,,h Hoist the subtopics into a temporary file - -The changes are merged back into the original file by closing the temporary -hoist file with - - :q :wq :x ZZ - -If something went wrong, you can perform a manual de-hoisting with the -following procedure: - -Open the main file in VimOutliner Search for the line containing the __hoist -tag On this line, do - - ,,H Manual de-hoisting - - *votl-clock* -Clock~ - -The clock plugin is a little imitation of a nice feature from emacs org mode. -The clockpugin allows to track times and summarize them up in the parent -heading. - -To enable this plugin uncomment the following line in |vimoutlinerrc|: -> - "let g:vo_modules_load .= ':clock' -< -To start clocking you need to write a heading containing times in square -brackets like shown below. After the closing bracket -> indicates the place -where the calculated time is written. The arrow can be followed by a char to -indicate to unit in which the time is displayed. Use 's' for seconds, 'm' for -minutes, 'h' for hours and 'd' for days. If no unit is given hours are used. -> - Year 2011 -> d - January -> - Monday, 3th [08:30:00 -- 17:45:00] -> m - Tuesday, 3th [08:50:25 -- 18:00:02] -> s -< - -To summarize the times up within the outline headings ending with -> {char} -use - - ,,cu Clock update with the cursor somewhere in the hierarchy. - -After that the outline should look like this: -> - Year 2011 -> 0.77 d - January -> 18.41 h - Monday, 3th [08:30:00 -- 17:45:00] -> 555.00 m - Tuesday, 3th [08:50:25 -- 18:00:02] -> 32977 s -< -Every time the times are changed or the units where changed use ,,cu to update -all times within the hierarchy. - -Mappings for fast clocking: - - ,,cs Clock start. Date and current time as start and end time are - written at cursor position. Works in normal mode and insert mode. -> - Year 2011 -> 0.77 d - January -> 18.41 h - Monday, 3th [08:30:00 -- 17:45:00] -> 555.00 m - Tuesday, 3th [08:50:25 -- 18:00:02] -> 32977 s - 2011-10-11 [01:32:11 -- 01:32:11] -> -> -To set a new end time, place the cursor at the desired line and use following -mapping: - - ,,cS Clock stop. Set the end time to current time. This works also in - normal mode and insert mode. - -> - Year 2011 -> 0.77 d - January -> 18.41 h - Monday, 3th [08:30:00 -- 17:45:00] -> 555.00 m - Tuesday, 3th [08:50:25 -- 18:00:02] -> 32977 s - 2011-10-11 [01:32:11 -- 01:42:19] -> 0.17 h -> -At the moment there are no user defined time formats supported. And it's not -possible to clock times over the midnight like [22:25:00 -- 01:00:00], but -it's usable for the most important cases. - - -============================================================================== -Scripts *votl-scripts* - - -The VimOutliner distribution currently includes several useful external -scripts to support interoutline links, HTML export and more. All scripts are -included in your $HOME/.vim/vimoutliner/scripts folder. For more information -on these scripts see usage section in the scripts. You can also find several -of these scripts on this web site with links to their specific web site: -https://sites.google.com/site/vimoutlinerinfo/scripts-for-vimoutliner - - -Information on some of the scripts - -votl_maketags.pl *votl-maketags* - -A basic description of how to use this Perl script is given in section -|votl-testing|, subsection "Verify interoutline linking". - -otl2html.py *otl2html* - -This Python script transforms an outline into an HTML file. Use $ otl2html.py ---help to get detailed information. - -This script does not adhere to the VimOutliner naming convention with the -'votl_' prefix because it is not necessary for any VimOutliner functionality. -It is provided both as a useful tool for creating HTML pages and HTML slides -from outlines and as a working demonstration of how to convert .otl files to -other formats. - - -============================================================================== -Other Information *votl-other-info* - - -The VimOutliner Project~ - -- How do I add my own features? -Two ways -- by changing VimOutliner source code, or by inserting your own code -in |vimoutlinerrc|, which runs at the end of the VimOutliner startup -scripts. You might have to merge your personal vimoutlinerrc with future -versions to take advantage of new features. - -- How is VimOutliner licensed? -VimOutliner is licensed under the GNU General Public License. - -- How do I contribute to VimOutliner -Step 1 is to subscribe to our mailing list. Join up at -https://groups.google.com/forum/#!forum/vimoutliner. -Lurk for a few days or so to get the feel, then submit your idea/suggestion. -A lively discussion will ensue, after which your idea, probably in some modified -form, will be considered. The more of the actual work you have done, the more -likely your feature will go in the distribution in a timely manner. - - -- What's with the VimOutliner file names? -All VimOutliner files must begin with votl_ unless Vim itself requires them to -have a different name. A few older files from previous versions break this -rule, but over time these will be changed to our naming convention. - -In the old days, with the "self contained" philosophy, there was no naming -convention, because VimOutliner files were segregated into their own tree. -With the coming of the "vim plugin" philosophy, there's a need to identify -VimOutliner files for purposes of modification, upgrade and de-installation. -Hence our naming convention. - -- What if my feature doesn't make it into the VimOutliner distribution? -You can offer it on your own web site, or very possibly on -to the forthcoming new VimOutliner home page VimOutliner ships with its -core features, but many additional functionalities, especially those that -operate from Perl scripts (or bash or python) are available outside the -distro. For instance, right now there's an Executable Line feature that turns -VimOutliner into a true single tree information reservoir. The Executable Line -feature is available extra-distro on the VimOutliner home page. See also the -scripts included in the $HOME/.vim/vimoutliner/scripts folder. - - -Anticipated improvements in later versions~ - -Command-invoking headlines - Already prototyped - Probably coming next version - Allows you to press a key and get an html command in a browser - Enables a true single tree knowledge collection - Enables use of VimOutliner as a shell - -Groupware - Not yet well defined - Enables collaborative work on an outline - A pipe dream, but VimOutliner itself was once a pipe dream - -Easy mode - Let's Windows users operate VO like a common insert-only editor. This will - remove a great deal of VO's keyboarder- friendly features. But then, - they're Windows users: let them use the mouse. - -Headline to headline links - Not yet sanctioned, might never be implemented If implemented, this would - presumably create links not just between outlines, but between headlines, - either in the same outline or in a different one. This would be a start on - "neural networking". - -Headline numbering - Under feasibility investigation - Supported by external scripts - -Toolbar in gvim - Under feasibility investigation - - -Further information on outlines, outline processing and outliners~ - -http://www.vim.org/scripts/script.php?script_id=3515 -vim.org script site - -http://freecode.com/projects/vimoutliner -Main distribution website - -https://github.com/vimoutliner/vimoutliner -git repository - -http://www.troubleshooters.com/projects/alt-vimoutliner-litt/ -Preliminary main web site with links to other sites - -http://www.troubleshooters.com/tpromag/199911/199911.htm -Outlining discussion, not product specific - -http://www.troubleshooters.com/linux/olvim.htm -Discussion on how to use Vim for outlining - -http://www.troubleshooters.com/projects/vimoutliner.htm -Former Web page for the VimOutliner distro - -http://www.outliners.com -Discussion of (proprietary) outliners from days gone by. -Downloads for ancient versions of such outliners. -Unfortunately, all are DOS, Windows and Mac. - -http://members.ozemail.com.au/~caveman/Creative/Software/Inspiration/index.html -Discussion of (proprietary,Mac) Inspiration software -This page discusses many methods of thought/computer interaction: - Visual Outlining - Textual Outlining - Idea mapping - Mind Mapping - Brainstorming with Rapid Fire Entry - Concept Mapping - Story boarding - Diagrams (using rich symbol library) - -http://members.ozemail.com.au/~caveman/Creative/index.html -Not about outlines, but instead about how to use your brain. -The whole purpose of outlines is to use your brain. -New ways of using your brain produce new ways to use outlines. - -For the VimOutliner version information and history, see the CHANGELOG. - diff --git a/pack/acp/start/vimoutliner/doc/votl_cheatsheet.txt b/pack/acp/start/vimoutliner/doc/votl_cheatsheet.txt deleted file mode 100644 index d9f877d..0000000 --- a/pack/acp/start/vimoutliner/doc/votl_cheatsheet.txt +++ /dev/null @@ -1,85 +0,0 @@ - *votl_cheatsheet.txt* Last change: 2013-04-06 - -VIMOUTLINER CHEAT SHEET~ - -This overview has Vimoutliner specific commands for the available operations. -Remember that all Vim commands can be performed in Vimoutliner files. This is -especially useful for copying, pasting, moving around and similar commands. - -For more extensive descriptions of command uses in Vimoutliner do ':h vo-command'. |vo-command| - -List format explained: [command] [mode] [description] - - - -CHECKBOXES~ - -,,cb normal Insert a check box on the current line/range -,,cx normal Toggle check box state (percentage aware) -,,cd normal Delete check boxes -,,c% normal Create a check box with percentage placeholder -,,cp normal Create a check box with percentage placeholder on all -headings -,,cz normal Compute completion for the tree below the current -heading. - - -EXECUTABLE LINES~ - -,,e normal Execute the executable tag line under cursor - - -FOLDING~ - -,,1 all set foldlevel=0 -,,2 all set foldlevel=1 -,,3 all set foldlevel=2 -,,4 all set foldlevel=3 -,,5 all set foldlevel=4 -,,6 all set foldlevel=5 -,,7 all set foldlevel=6 -,,8 all set foldlevel=7 -,,9 all set foldlevel=8 -,,0 all set foldlevel=99999 - - -FORMATTING~ - -,,- all Draw dashed line -,,s normal Sort sub-tree under cursor ascending -,,S normal Sort sub-tree under cursor descending -,,B normal Make body text start with a space -,,b normal Make body text start with a colon and space ->> normal Demote headline -<< normal Promote headline - insert Demote headline - insert Promote headline -Q normal Reformat (Synonym for gq) - - -OTHER~ - -,,f normal Directory listing of the current directory -,,w insert Save changes and return to insert mode -,,D all VimOutliner reserved command - - -TAGGING/INTEROUTLINE~ - - normal Follow tag/interoutline (Synonym for Ctrl+]) - normal Return from tag (Synonym for Ctrl+T) - - -TIME AND DATE~ - -,,t normal Append timestamp (HH:MM:SS) to heading -,,T normal Prepend timestamp (HH:MM:SS) to heading -,,t insert Insert timestamp (HH:MM:SS) at cursor -,,d normal Append datestamp (YYYY-MM-DD) to heading -,,d insert Insert datestamp (YYYY-MM-DD) at cursor -,,D normal Prepend datestamp (YYYY-MM-DD) to heading - - - vim:set filetype=help textwidth=78: - - diff --git a/pack/acp/start/vimoutliner/ftdetect/votl.vim b/pack/acp/start/vimoutliner/ftdetect/votl.vim deleted file mode 100644 index 2897f50..0000000 --- a/pack/acp/start/vimoutliner/ftdetect/votl.vim +++ /dev/null @@ -1,26 +0,0 @@ -"# ####################################################################### -"# filetype.vim: filetype loader -"# version 0.4.0 -"# Copyright (C) 2001,2003 by Steve Litt (slitt@troubleshooters.com) -"# -"# This program is free software; you can redistribute it and/or modify -"# it under the terms of the GNU General Public License as published by -"# the Free Software Foundation; either version 2 of the License, or -"# (at your option) any later version. -"# -"# This program is distributed in the hope that it will be useful, -"# but WITHOUT ANY WARRANTY; without even the implied warranty of -"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -"# GNU General Public License for more details. -"# -"# You should have received a copy of the GNU General Public License -"# along with this program; if not, see . -"# -"# Steve Litt, slitt@troubleshooters.com, http://www.troubleshooters.com -"# ####################################################################### - -augroup filetypedetect - au! BufRead,BufNewFile *.otl setfiletype votl - au! BufRead,BufNewFile *.oln setfiletype xoutliner -augroup END - diff --git a/pack/acp/start/vimoutliner/ftplugin/votl.vim b/pack/acp/start/vimoutliner/ftplugin/votl.vim deleted file mode 100644 index 84b69ad..0000000 --- a/pack/acp/start/vimoutliner/ftplugin/votl.vim +++ /dev/null @@ -1,679 +0,0 @@ -"######################################################################### -"# ftplugin/votl.vim: VimOutliner functions, commands and settings -"# version 0.4.0 -"# Copyright (C) 2001,2003 by Steve Litt (slitt@troubleshooters.com) -"# Copyright (C) 2004,2014 by Noel Henson (noelwhenson@gmail.com) -"# -"# This program is free software; you can redistribute it and/or modify -"# it under the terms of the GNU General Public License as published by -"# the Free Software Foundation; either version 2 of the License, or -"# (at your option) any later version. -"# -"# This program is distributed in the hope that it will be useful, -"# but WITHOUT ANY WARRANTY; without even the implied warranty of -"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -"# GNU General Public License for more details. -"# -"# You should have received a copy of the GNU General Public License -"# along with this program; if not, see . -"# -"# Steve Litt, slitt@troubleshooters.com, http://www.troubleshooters.com -"######################################################################### - -" Load the plugin {{{1 -" Prevent the plugin from being loaded twice -"if exists("b:did_ftplugin") -" finish -"endif -"let b:did_ftplugin = 1 -let b:current_syntax = "outliner" - -" Default Preferences {{{1 - -let use_space_colon=0 - -" End User Preferences - -" VimOutliner Standard Settings {{{1 -setlocal autoindent -"setlocal backspace=2 -setlocal wrapmargin=5 -setlocal wrap -setlocal tw=78 -setlocal noexpandtab -setlocal tabstop=4 " tabstop and shiftwidth must match -setlocal shiftwidth=4 " values from 2 to 8 work well -"setlocal nosmarttab -"setlocal softtabstop=0 -setlocal foldlevel=20 -setlocal foldcolumn=1 " turns on "+" at the beginning of close folds -setlocal foldmethod=expr -setlocal foldexpr=MyFoldLevel(v:lnum) -setlocal indentexpr= -setlocal nocindent -setlocal iskeyword=@,39,45,48-57,_,129-255 - -" Vim Outliner Functions {{{1 - -if !exists("loaded_vimoutliner_functions") -let loaded_vimoutliner_functions=1 - -" Sorting {{{2 -" IsParent(line) {{{3 -" Return 1 if this line is a parent -function! IsParent(line) - return (Ind(a:line)+1) == Ind(a:line+1) -endfunction -"}}}3 -" FindParent(line) {{{3 -" Return line if parent, parent line if not -function! FindParent(line) - if IsParent(a:line) - return a:line - else - let l:parentindent = Ind(a:line)-1 - let l:searchline = a:line - while (Ind(l:searchline) != l:parentindent) && (l:searchline > 0) - let l:searchline = l:searchline-1 - endwhile - return l:searchline - endif -endfunction -"}}}3 -" FindLastChild(line) {{{3 -" Return the line number of the last decendent of parent line -function! FindLastChild(line) - let l:parentindent = Ind(a:line) - let l:searchline = a:line+1 - while Ind(l:searchline) > l:parentindent - let l:searchline = l:searchline+1 - endwhile - return l:searchline-1 -endfunction -"}}}3 -" MoveDown() {{{3 -" Move a heading down by one -" Used for sorts and reordering of headings -function! MoveDown() - call cursor(line("."),0) - del x - put x -endfunction -"}}}3 -" DelHead() {{{3 -" Delete a heading -" Used for sorts and reordering of headings -function! DelHead(line) - let l:fstart = foldclosed(a:line) - if l:fstart == -1 - let l:execstr = a:line . "del x" - else - let l:fend = foldclosedend(a:line) - let l:execstr = l:fstart . "," . l:fend . "del x" - endif - exec l:execstr -endfunction -" PutHead() {{{3 -" Put a heading -" Used for sorts and reordering of headings -function! PutHead(line) - let l:fstart = foldclosed(a:line) - if l:fstart == -1 - let l:execstr = a:line . "put x" - exec l:execstr - else - let l:fend = foldclosedend(a:line) - let l:execstr = l:fend . "put x" - exec l:execstr - endif -endfunction -"}}}3 -" NextHead(line) {{{3 -" Return line of next heading -" Used for sorts and reordering of headings -function! NextHead(line) - let l:fend = foldclosedend(a:line) - if l:fend == -1 - return a:line+1 - else - return l:fend+1 - endif -endfunction -"}}}3 -" CompHead(line) {{{3 -" Compare this heading and the next -" Return 1: next is greater, 0 next is same, -1 next is less -function! CompHead(line) - let nexthead = NextHead(a:line) - let l:thisline=getline(a:line) - let l:nextline=getline(nexthead) - if indent(a:line) != indent(nexthead) - return 0 - elseif l:thisline <# l:nextline - return 1 - elseif l:thisline ># l:nextline - return -1 - else - return 0 - endif -endfunction - -"}}}3 -" Sort1Line(line) {{{3 -" Compare this heading and the next and swap if out of order -" Dir is 0 for forward, 1 for reverse -" Return a 1 if a change was made -function! Sort1Line(line,dir) - if (CompHead(a:line) == -1) && (a:dir == 0) - call DelHead(a:line) - call PutHead(a:line) - return 1 - elseif (CompHead(a:line) == 1) && (a:dir == 1) - call DelHead(a:line) - call PutHead(a:line) - return 1 - else - return 0 - endif -endfunction -"}}}3 -" Sort1Pass(start,end,dir) {{{3 -" Compare this heading and the next and swap if out of order -" Dir is 0 for forward, 1 for reverse -" Return a 0 if no change was made, other wise return the change count -function! Sort1Pass(fstart,fend,dir) - let l:i = a:fstart - let l:changed = 0 - while l:i < a:fend - let l:changed = l:changed + Sort1Line(l:i,a:dir) - let l:i = NextHead(l:i) - endwhile - return l:changed -endfunction -"}}}3 -" Sort(start,end,dir) {{{3 -" Sort this range of headings -" dir: 0 = ascending, 1 = decending -function! SortRange(fstart,fend,dir) - let l:changed = 1 - while l:changed != 0 - let l:changed = Sort1Pass(a:fstart,a:fend,a:dir) - endwhile -endfunction -"}}}3 -" SortChildren(dir) {{{3 -" Sort the children of a parent -" dir: 0 = ascending, 1 = descending -function! SortChildren(dir) - let l:oldcursor = line(".") - let l:fstart = FindParent(line(".")) - let l:fend = FindLastChild(l:fstart) - let l:fstart = l:fstart - if l:fend <= l:fstart + 1 - return - endif - call append(line("$"),"Temporary last line for sorting") - mkview - let l:execstr = "set foldlevel=" . foldlevel(l:fstart) - exec l:execstr - call SortRange(l:fstart + 1,l:fend,a:dir) - call cursor(line("$"),0) - del x - loadview - call cursor(l:oldcursor,0) -endfunction -"}}}3 -"}}}2 -" MakeChars() {{{2 -" Make a string of characters -" Used for strings of repeated characters -function MakeChars(count,char) - let i = 0 - let l:chars="" - while i < a:count - let l:chars = l:chars . a:char - let i = i + 1 - endwhile - return l:chars -endfunction -"}}}2 -" MakeSpaces() {{{2 -" Make a string of spaces -function MakeSpaces(count) - return MakeChars(a:count," ") -endfunction -"}}}2 -" MakeDashes() {{{2 -" Make a string of dashes -function MakeDashes(count) - return MakeChars(a:count,"-") -endfunction -"}}}2 -" MyFoldText() {{{2 -" Create string used for folded text blocks -function MyFoldText() - if exists('g:vo_fold_length') && g:vo_fold_length == "max" - let l:foldlength = winwidth(0) - 1 - &numberwidth - &foldcolumn - elseif exists('g:vo_fold_length') - let l:foldlength = g:vo_fold_length - else - let l:foldlength = 58 - endif - " I have this as an option, if the user wants to set "…" as the padding - " string, or some other string, like "(more)" - if exists('g:vo_trim_string') - let l:trimstr = g:vo_trim_string - else - let l:trimstr = "..." - endif - let l:MySpaces = MakeSpaces(&sw) - let l:line = getline(v:foldstart) - let l:bodyTextFlag=0 - if l:line =~ "^\t* \\S" || l:line =~ "^\t*\:" - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[TEXT]" - elseif l:line =~ "^\t*\;" - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[TEXT BLOCK]" - elseif l:line =~ "^\t*\> " - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[USER]" - elseif l:line =~ "^\t*\>" - let l:ls = stridx(l:line,">") - let l:le = stridx(l:line," ") - if l:le == -1 - let l:l = strpart(l:line, l:ls+1) - else - let l:l = strpart(l:line, l:ls+1, l:le-l:ls-1) - endif - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[USER ".l:l."]" - elseif l:line =~ "^\t*\< " - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[USER BLOCK]" - elseif l:line =~ "^\t*\<" - let l:ls = stridx(l:line,"<") - let l:le = stridx(l:line," ") - if l:le == -1 - let l:l = strpart(l:line, l:ls+1) - else - let l:l = strpart(l:line, l:ls+1, l:le-l:ls-1) - endif - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[USER BLOCK ".l:l."]" - elseif l:line =~ "^\t*\|" - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[TABLE]" - endif - let l:sub = substitute(l:line,'\t',l:MySpaces,'g') - let l:sublen = strdisplaywidth(l:sub) - let l:end = " (" . ((v:foldend + l:bodyTextFlag)- v:foldstart) - if ((v:foldend + l:bodyTextFlag)- v:foldstart) == 1 - let l:end = l:end . " line)" - else - let l:end = l:end . " lines)" - endif - let l:endlen = strdisplaywidth(l:end) - - " Multiple cases: - " (1) Full padding with ellipse (...) or user defined string, - " (2) No point in padding, pad would just obscure the end of text, - " (3) Don't pad and use dashes to fill up the space. - if l:endlen + l:sublen > l:foldlength - let l:sub = strpart(l:sub, 0, l:foldlength - l:endlen - strdisplaywidth(l:trimstr)) - let l:sub = l:sub . l:trimstr - let l:sublen = strdisplaywidth(l:sub) - let l:sub = l:sub . l:end - elseif l:endlen + l:sublen == l:foldlength - let l:sub = l:sub . l:end - else - let l:sub = l:sub . " " . MakeDashes(l:foldlength - l:endlen - l:sublen - 1) . l:end - endif - return l:sub.repeat(' ', winwidth(0)-strdisplaywidth(l:sub)) -endfunction -"}}}2 -" InsertDate() {{{2 -" Insert today's date. -function InsertDate(ba) - let @x = strftime("%Y-%m-%d") - if a:ba == "0" - normal! "xp - else - normal! "xP - endif -endfunction -"}}}2 -" InsertSpaceDate() {{{2 -" Insert a space, then today's date. -function InsertSpaceDate() - let @x = " " - let @x = @x . strftime("%Y-%m-%d") - normal! "xp -endfunction -"}}}2 -" InsertTime() {{{2 -" Insert the time. -function InsertTime(ba) - let @x = strftime("%H:%M:%S") - if a:ba == "0" - normal! "xp - else - normal! "xP - endif -endfunction -"}}}2 -" InsertSpaceTime() {{{2 -" Insert a space, then the time. -function InsertSpaceTime() - let @x = " " - let @x = @x . strftime("%H:%M:%S") - normal! "xp -endfunction -"}}}2 -" Ind(line) {{{2 -" Determine the indent level of a line. -" Courtesy of Gabriel Horner -function! Ind(line) - return indent(a:line)/&tabstop -endfunction -"}}}2 -" BodyText(line) {{{2 -" Determine the indent level of a line. -function! BodyText(line) - return (match(getline(a:line),"^\t*:") == 0) -endfunction -"}}}2 -" PreformattedBodyText(line) {{{2 -" Determine the indent level of a line. -function! PreformattedBodyText(line) - return (match(getline(a:line),"^\t*;") == 0) -endfunction -"}}}2 -" PreformattedUserText(line) {{{2 -" Determine the indent level of a line. -function! PreformattedUserText(line) - return (match(getline(a:line),"^\t*<") == 0) -endfunction -"}}}2 -" PreformattedUserTextLabeled(line) {{{2 -" Determine the indent level of a line. -function! PreformattedUserTextLabeled(line) - return (match(getline(a:line),"^\t*<\S") == 0) -endfunction -"}}}2 -" PreformattedUserTextSpace(line) {{{2 -" Determine the indent level of a line. -function! PreformattedUserTextSpace(line) - return (match(getline(a:line),"^\t*< ") == 0) -endfunction -"}}}2 -" UserText(line) {{{2 -" Determine the indent level of a line. -function! UserText(line) - return (match(getline(a:line),"^\t*>") == 0) -endfunction -"}}}2 -" UserTextSpace(line) {{{2 -" Determine the indent level of a line. -function! UserTextSpace(line) - return (match(getline(a:line),"^\t*> ") == 0) -endfunction -"}}}2 -" UserTextLabeled(line) {{{2 -" Determine the indent level of a line. -function! UserTextLabeled(line) - return (match(getline(a:line),"^\t*>\S") == 0) -endfunction -"}}}2 -" PreformattedTable(line) {{{2 -" Determine the indent level of a line. -function! PreformattedTable(line) - return (match(getline(a:line),"^\t*|") == 0) -endfunction -"}}}2 -" MyFoldLevel(Line) {{{2 -" Determine the fold level of a line. -function MyFoldLevel(line) - let l:myindent = Ind(a:line) - let l:nextindent = Ind(a:line+1) - - if BodyText(a:line) - if (BodyText(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (BodyText(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif PreformattedBodyText(a:line) - if (PreformattedBodyText(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (PreformattedBodyText(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif PreformattedTable(a:line) - if (PreformattedTable(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (PreformattedTable(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif PreformattedUserText(a:line) - if (PreformattedUserText(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (PreformattedUserTextSpace(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif PreformattedUserTextLabeled(a:line) - if (PreformattedUserTextLabeled(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (PreformattedUserText(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif UserText(a:line) - if (UserText(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (UserTextSpace(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif UserTextLabeled(a:line) - if (UserTextLabeled(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (UserText(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - else - if l:myindent < l:nextindent - return '>'.(l:myindent+1) - endif - if l:myindent > l:nextindent - "return '<'.(l:nextindent+1) - return (l:myindent) - "return '<'.(l:nextindent-1) - endif - return l:myindent - endif -endfunction -"}}}2 -" Spawn(line) {{{2 -" Execute an executable line -" Courtesy of Steve Litt -if !exists("loaded_steveoutliner_functions") - let loaded_steveoutliner_functions=1 -function Spawn() - let theline=getline(line(".")) - let idx=matchend(theline, "_exe_\\s*") - if idx == -1 - echo "Not an executable line" - else - let command=strpart(theline, idx) - let command="!".command - exec command - endif -endfunction -endif -"}}}2 -" This should be a setlocal but that doesn't work when switching to a new .otl file -" within the same buffer. Using :e has demonstrated this. -set foldtext=MyFoldText() - -"setlocal fillchars=|, - -endif " if !exists("loaded_vimoutliner_functions") -" End Vim Outliner Functions - -" Menu Entries {{{1 -" VO menu -amenu &VO.Expand\ Level\ &1 :set foldlevel=0 -amenu &VO.Expand\ Level\ &2 :set foldlevel=1 -amenu &VO.Expand\ Level\ &3 :set foldlevel=2 -amenu &VO.Expand\ Level\ &4 :set foldlevel=3 -amenu &VO.Expand\ Level\ &5 :set foldlevel=4 -amenu &VO.Expand\ Level\ &6 :set foldlevel=5 -amenu &VO.Expand\ Level\ &7 :set foldlevel=6 -amenu &VO.Expand\ Level\ &8 :set foldlevel=7 -amenu &VO.Expand\ Level\ &9 :set foldlevel=8 -amenu &VO.Expand\ Level\ &All :set foldlevel=99999 -amenu &VO.-Sep1- : -"Tools sub-menu -let s:path2scripts = expand(':p:h:h').'/vimoutliner/scripts' -" otl2html -exec 'amenu &VO.&Tools.otl2&html\.py\ (otl2html\.py\ thisfile\ -S\ html2otl_nnnnnn\.css\ >\ thisfile\.html) :!'.s:path2scripts.'/otl2html.py -S html2otl_nnnnnn.css % > %.html' -" otl2docbook -exec 'amenu &VO.&Tools.otl2&docbook\.pl\ (otl2docbook\.pl\ thisfile\ >\ thisfile\.dbk) :!'.s:path2scripts.'/otl2docbook.pl % > %.dbk' -" otl2table -exec 'amenu &VO.&Tools.otl2&table\.py\ (otl2table\.py\ thisfile\ >\ thisfile\.txt) :!'.s:path2scripts.'/otl2table.py % > %.txt' -" otl2tags => FreeMind -exec 'amenu &VO.&Tools.otl2tags\.py\ =>\ &FreeMind\ (otl2tags\.py\ \-c\ otl2tags_freemind\.conf\ thisfile\ >\ thisfile\.mm) :!'.s:path2scripts.'/otl2tags.py -c '.s:path2scripts.'/otl2tags_freemind.conf % > %.mm' -" otl2tags => Graphviz -exec 'amenu &VO.&Tools.otl2tags\.py\ =>\ &Graphviz\ (otl2tags\.py\ \-c\ otl2tags_graphviz\.conf\ thisfile\ >\ thisfile\.gv) :!'.s:path2scripts.'/otl2tags.py -c '.s:path2scripts.'/otl2tags_graphviz.conf % > %.gv' -amenu &VO.&Tools.&myotl2thml\.sh\ (myotl2html\.sh\ thisfile) :!myotl2html.sh % -amenu &VO.-Sep2- : -amenu &VO.&Color\ Scheme :popup Edit.Color\ Scheme -amenu &VO.-Sep3- : -amenu &VO.&Help.&Index :he vo -amenu &VO.&Help.&,,\ Commands :he votl-command -amenu &VO.&Help.&Checkboxes :he votl-checkbox -amenu &VO.&Help.&Hoisting :he votl-hoisting -amenu &Help.-Sep1- : -" Help menu additions -amenu &Help.&Vim\ Outliner.&Index :he votl -amenu &Help.&Vim\ Outliner.&,,\ Commands :he votl-command -amenu &Help.&Vim\ Outliner.&Checkboxes :he votl-checkbox -amenu &Help.&Vim\ Outliner.&Hoisting :he votl-hoisting -"}}}1 -" Auto-commands {{{1 -if !exists("autocommand_vo_loaded") - let autocommand_vo_loaded = 1 - au BufNewFile,BufRead *.otl setf votl -" au CursorHold *.otl syn sync fromstart - "set updatetime=500 -endif -"}}}1 - -" this command needs to be run every time so Vim doesn't forget where to look -setlocal tags^=$HOME/.vim/vimoutliner/vo_tags.tag - -" Added an indication of current syntax as per Dillon Jones' request -let b:current_syntax = "outliner" - -" Directory where VO is located now -let vo_dir = expand(":p:h:h") - -" Load rc file, only the first found. -let rcs = split(globpath('$HOME,$HOME/.vimoutliner','.vimoutlinerrc'), "\n") + - \ split(globpath('$HOME,$HOME/.vimoutliner,$HOME/.vim', 'vimoutlinerrc'), "\n") + - \ split(globpath(vo_dir, 'vimoutlinerrc'), "\n") - -if len(rcs) > 0 - exec 'source '.rcs[0] -else - runtime vimoutliner/vimoutlinerrc -endif -" Load modules -if exists('g:vo_modules_load') - for vo_module in split(g:vo_modules_load, '\s*:\s*') - exec "runtime! vimoutliner/plugin/votl_" . vo_module . ".vim" - endfor -unlet! vo_module -endif - -" Vim Outliner Key Mappings {{{1 -" insert the date -nmap d $:call InsertSpaceDate() -imap d ~x:call InsertDate(0)a -nmap D ^:call InsertDate(1)a - -" insert the time -nmap t $:call InsertSpaceTime() -imap t ~x:call InsertTime(0)a -nmap T ^:call InsertTime(1)a - -" sort a list naturally -map s :silent call SortChildren(0) -" sort a list, but you supply the options -map S :silent call SortChildren(1) - -" invoke the file explorer -map f :e . -imap f :e . - -" Insert a fence for segmented lists. -" this divider is used by otl2html.py to create '
' -map - o----------------------------------------0 -imap - ---------------------------------------- - -" switch document between the two types of bodytext styles -if use_space_colon == 1 - " First, convert document to the marker style - map b :%s/\(^\t*\) :/\1/e:%s/\(^\t*\) /\1 : /e:let @/="" - " Now, convert document to the space style - map B :%s/\(^\t*\) :/\1/e:let @/="" -else - " First, convert document to the marker style - map b :%s/\(^\t*\):/\1/e:%s/\(^\t*\) /\1: /e:let @/="" - " Now, convert document to the space style - map B :%s/\(^\t*\):/\1/e:let @/="" -endif - -" Steve's additional mappings start here -map -map -map 0 :set foldlevel=99999 -map 9 :set foldlevel=8 -map 8 :set foldlevel=7 -map 7 :set foldlevel=6 -map 6 :set foldlevel=5 -map 5 :set foldlevel=4 -map 4 :set foldlevel=3 -map 3 :set foldlevel=2 -map 2 :set foldlevel=1 -map 1 :set foldlevel=0 -"next line commented out due to hard-coded nature and ancient, nonexistent file -"map ,, :runtime vimoutliner/vimoutlinerrc -map! w :wa -nmap e :call Spawn() -" Steve's additional mappings end here - -" End of Vim Outliner Key Mappings }}}1 - -" The End -" vim600: set foldmethod=marker foldlevel=0: diff --git a/pack/acp/start/vimoutliner/install.sh b/pack/acp/start/vimoutliner/install.sh deleted file mode 100755 index 254b828..0000000 --- a/pack/acp/start/vimoutliner/install.sh +++ /dev/null @@ -1,173 +0,0 @@ -#!/bin/bash - -homedir=$HOME -vimdir=$homedir/.vim -vodir=$vimdir/vimoutliner -OS=`uname` - -backupargs="" - - -#SOME FUNCTIONS -sure () { - read REPLY - echo test $REPLY = "y" || test $REPLY = "Y" -} - -make_dir () { - test -d $1 || { - echo " creating: $1" - mkdir $1 - created=1 - } -} - -copyfile () { - echo " installing: $2/$1" - install $backupargs $1 $2/$1 -} - -copydir () { - files=`ls $1` - for i in $files; do - echo " installing: $2/$i" - if [ -d $1/$i ]; then - mkdir -p $2/$i - copydir $1/$i $2/$i - else - install $backupargs $1/$i $2 - fi - done -} - -#START THE INSTALLATION -cat <> $homedir/.vimrc - } -egrep -lq "syntax[[:space:]]+on" $homedir/.vimrc || \ - { modified=1 - echo "syntax on" >> $homedir/.vimrc - } -if [ $modified -eq 0 ] ; then - echo " not modified"; -else - echo " modifying $homedir/.vimrc" -fi - -#TWEAK $HOME/.vim/filetype.vim -modified=0 -echo checking/creating/modifying $homedir/.vim/filetype.vim -test -f $homedir/.vim/filetype.vim || \ - { echo " creating $homedir/.vim/filetype.vim" - touch $homedir/.vim/filetype.vim - } -egrep -lq "runtime\! ftdetect/\*.vim" $homedir/.vim/filetype.vim || \ - { echo " modifying $homedir/.vim/filetype.vim" - modified=1 - echo "runtime! ftdetect/*.vim" >> $homedir/.vim/filetype.vim - } -if [ $modified -eq 0 ] ; then echo " not modified"; fi - -#CLEANUP OLD INSTALLATIONS -echo "cleaning up old (<0.3.5) installations" -files=`find $vimdir -iname "vo_*"` -for file in $files; do - echo "removing $file" - rm -v $file -done - -#CLEANUP OLD BACKUPS -if [ -z $backupargs ]; then - echo "cleaning up old backups" - files=`find $vimdir -iname "vo*.old"` - for file in $files; do - echo "removing $file" - rm -v $file - done - files2=`find $vodir -iname "*.old"` - for file in $files; do - echo "removing $file" - rm -v $file - done -fi - -#COPY FILES -echo "installing files" -copyfile syntax/votl.vim $vimdir -copyfile ftplugin/votl.vim $vimdir -copyfile ftdetect/votl.vim $vimdir -copyfile colors/vo_light.vim $vimdir -copyfile colors/vo_dark.vim $vimdir -copyfile doc/votl.txt $vimdir -copyfile doc/votl_cheatsheet.txt $vimdir -copyfile vimoutlinerrc $vodir -copyfile vimoutliner/scripts/votl_maketags.pl $vimdir - -#INCORPORATE HELP DOCUMENTATION -echo "Installing vimoutliner documentation" -vim -c "helptags $HOME/.vim/doc" -c q - -#INSTALL THE ADD-ONS -cat <. -"# -"# Steve Litt, slitt@troubleshooters.com, http://www.troubleshooters.com -"######################################################################### - -" HISTORY {{{1 -"######################################################################### -"# V0.1.0 Pre-alpha -"# Set of outliner friendly settings -"# Steve Litt, 5/28/2001 -"# End of version 0.1.0 -"# -"# V0.1.1 Pre-alpha -"# No change -"# -"# Steve Litt, 5/28/2001 -"# End of version 0.1.1 -"# -"# V0.1.2 Pre-alpha -"# No Change -"# Steve Litt, 5/30/2001 -"# End of version 0.1.2 -"# V0.1.3 Pre-alpha -"# No Change -"# Steve Litt, 5/30/2001 -"# End of version 0.1.3 -"# V0.2.0 -"# Noel Henson adds code for outliner-friendly expand and -"# collapse, comma comma commands, color coding, hooks for a -"# spellchecker, sorting, and date insertion. -"# Noel Henson, 11/24/2002 -"# End of version 0.2.0 -"# END OF HISTORY -"# -"######################################################################### - -" Colors linked {{{1 -" Bill Powell, http://www.billpowellisalive.com -" Linked colors to normal groups. Different schemes will need tweaking. -" Occasionally certain groups will be rendered invisible. ;) -" -" Changelog {{{2 -"2007 Jan 23, 21:23 Tue - 0.3.0, Modified version 0.1 - " Linked syntax groups to standard Vim color groups, intsead of to - " particular colors. Now each colorscheme can work its own magic on - " a VO file. -"2007 Apr 30, 9:36 Mon - 0.3.0, Modified version 0.2 - " Changed a few linked groups to reduce chances of groups being invisible. - " No longer use Ignore group for anything. - " Still a little redundancy; different groups might linked to same color group. - " E.g., PT1 and UT1. But some color schemes (e.g. astronout) will differentiate between - " Special and Debug. Others will use the same colors for, say, Identifier and Debug. - " It just depends. - " To tweak these groups, try :h syntax and go to group-name. - " This shows the color groups, highlighted in your current colorscheme. -" }}} -hi link OL1 Statement -hi link OL2 Identifier -hi link OL3 Constant -hi link OL4 PreProc -hi link OL5 Statement -hi link OL6 Identifier -hi link OL7 Constant -hi link OL8 PreProc -hi link OL9 Statement - -"colors for tags -"hi link outlTags Tag -hi link outlTags Todo - -"color for body text -hi link BT1 Comment -hi link BT2 Comment -hi link BT3 Comment -hi link BT4 Comment -hi link BT5 Comment -hi link BT6 Comment -hi link BT7 Comment -hi link BT8 Comment -hi link BT9 Comment - -"color for pre-formatted text -hi link PT1 Special -hi link PT2 Special -hi link PT3 Special -hi link PT4 Special -hi link PT5 Special -hi link PT6 Special -hi link PT7 Special -hi link PT8 Special -hi link PT9 Special - -"color for tables -hi link TA1 Type -hi link TA2 Type -hi link TA3 Type -hi link TA4 Type -hi link TA5 Type -hi link TA6 Type -hi link TA7 Type -hi link TA8 Type -hi link TA9 Type - -"color for user text (wrapping) -hi link UT1 Debug -hi link UT2 Debug -hi link UT3 Debug -hi link UT4 Debug -hi link UT5 Debug -hi link UT6 Debug -hi link UT7 Debug -hi link UT8 Debug -hi link UT9 Debug - -"color for user text (non-wrapping) -hi link UB1 Underlined -hi link UB2 Underlined -hi link UB3 Underlined -hi link UB4 Underlined -hi link UB5 Underlined -hi link UB6 Underlined -hi link UB7 Underlined -hi link UB8 Underlined -hi link UB9 Underlined - -"colors for folded sections -"hi link Folded Special -"hi link FoldColumn Type - -"colors for experimental spelling error highlighting -"this only works for spellfix.vim with will be cease to exist soon -hi link spellErr Error -hi link BadWord Todo - -" Syntax {{{1 -syn clear -syn sync fromstart - -syn match outlTags '_tag_\w*' contained - -" Noel's style of body text {{{2 -syntax region BT1 start=+^ \S+ skip=+^ \S+ end=+^\S+me=e-1 end=+^\(\t\)\{1}\S+me=e-2 contains=spellErr,SpellErrors,BadWord contained -syntax region BT2 start=+^\(\t\)\{1} \S+ skip=+^\(\t\)\{1} \S+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT3 start=+^\(\t\)\{2} \S+ skip=+^\(\t\)\{2} \S+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT4 start=+^\(\t\)\{3} \S+ skip=+^\(\t\)\{3} \S+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT5 start=+^\(\t\)\{4} \S+ skip=+^\(\t\)\{4} \S+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT6 start=+^\(\t\)\{5} \S+ skip=+^\(\t\)\{5} \S+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT7 start=+^\(\t\)\{6} \S+ skip=+^\(\t\)\{6} \S+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT8 start=+^\(\t\)\{7} \S+ skip=+^\(\t\)\{7} \S+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT9 start=+^\(\t\)\{8} \S+ skip=+^\(\t\)\{8} \S+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained - -"comment-style bodytext as per Steve Litt {{{2 -syntax region BT1 start=+^:+ skip=+^:+ end=+^\S+me=e-1 end=+^\(\t\)\{1}\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT2 start=+^\(\t\)\{1}:+ skip=+^\(\t\)\{1}:+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT3 start=+^\(\t\)\{2}:+ skip=+^\(\t\)\{2}:+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT4 start=+^\(\t\)\{3}:+ skip=+^\(\t\)\{3}:+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT5 start=+^\(\t\)\{4}:+ skip=+^\(\t\)\{4}:+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT6 start=+^\(\t\)\{5}:+ skip=+^\(\t\)\{5}:+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT7 start=+^\(\t\)\{6}:+ skip=+^\(\t\)\{6}:+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT8 start=+^\(\t\)\{7}:+ skip=+^\(\t\)\{7}:+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region BT9 start=+^\(\t\)\{8}:+ skip=+^\(\t\)\{8}:+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained - -"Preformatted body text {{{2 -syntax region PT1 start=+^;+ skip=+^;+ end=+^\S+me=e-1 end=+^\(\t\)\{1}\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region PT2 start=+^\(\t\)\{1};+ skip=+^\(\t\)\{1};+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region PT3 start=+^\(\t\)\{2};+ skip=+^\(\t\)\{2};+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region PT4 start=+^\(\t\)\{3};+ skip=+^\(\t\)\{3};+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region PT5 start=+^\(\t\)\{4};+ skip=+^\(\t\)\{4};+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region PT6 start=+^\(\t\)\{5};+ skip=+^\(\t\)\{5};+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region PT7 start=+^\(\t\)\{6};+ skip=+^\(\t\)\{6};+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region PT8 start=+^\(\t\)\{7};+ skip=+^\(\t\)\{7};+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region PT9 start=+^\(\t\)\{8};+ skip=+^\(\t\)\{8};+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained - -"Preformatted tables {{{2 -syntax region TA1 start=+^|+ skip=+^|+ end=+^\S+me=e-1 end=+^\(\t\)\{1}\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region TA2 start=+^\(\t\)\{1}|+ skip=+^\(\t\)\{1}|+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region TA3 start=+^\(\t\)\{2}|+ skip=+^\(\t\)\{2}|+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region TA4 start=+^\(\t\)\{3}|+ skip=+^\(\t\)\{3}|+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region TA5 start=+^\(\t\)\{4}|+ skip=+^\(\t\)\{4}|+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region TA6 start=+^\(\t\)\{5}|+ skip=+^\(\t\)\{5}|+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region TA7 start=+^\(\t\)\{6}|+ skip=+^\(\t\)\{6}|+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region TA8 start=+^\(\t\)\{7}|+ skip=+^\(\t\)\{7}|+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region TA9 start=+^\(\t\)\{8}|+ skip=+^\(\t\)\{8}|+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained - -"wrapping user text {{{2 -syntax region UT1 start=+^>+ skip=+^>+ end=+^\S+me=e-1 end=+^\(\t\)\{1}\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UT2 start=+^\(\t\)\{1}>+ skip=+^\(\t\)\{1}>+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UT3 start=+^\(\t\)\{2}>+ skip=+^\(\t\)\{2}>+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UT4 start=+^\(\t\)\{3}>+ skip=+^\(\t\)\{3}>+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UT5 start=+^\(\t\)\{4}>+ skip=+^\(\t\)\{4}>+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UT6 start=+^\(\t\)\{5}>+ skip=+^\(\t\)\{5}>+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UT7 start=+^\(\t\)\{6}>+ skip=+^\(\t\)\{6}>+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UT8 start=+^\(\t\)\{7}>+ skip=+^\(\t\)\{7}>+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UT9 start=+^\(\t\)\{8}>+ skip=+^\(\t\)\{8}>+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained - -"non-wrapping user text {{{2 -syntax region UB1 start=+^<+ skip=+^<+ end=+^\S+me=e-1 end=+^\(\t\)\{1}\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UB2 start=+^\(\t\)\{1}<+ skip=+^\(\t\)\{1}<+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UB3 start=+^\(\t\)\{2}<+ skip=+^\(\t\)\{2}<+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UB4 start=+^\(\t\)\{3}<+ skip=+^\(\t\)\{3}<+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UB5 start=+^\(\t\)\{4}<+ skip=+^\(\t\)\{4}<+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UB6 start=+^\(\t\)\{5}<+ skip=+^\(\t\)\{5}<+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UB7 start=+^\(\t\)\{6}<+ skip=+^\(\t\)\{6}<+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UB8 start=+^\(\t\)\{7}<+ skip=+^\(\t\)\{7}<+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained -syntax region UB9 start=+^\(\t\)\{8}<+ skip=+^\(\t\)\{8}<+ end=+^\(\t\)*\S+me=s-1 contains=spellErr,SpellErrors,BadWord contained - -"comment-style bodytext formatting as per Steve Litt -syntax match Comment "^\s*:.*$" -setlocal fo-=t fo+=crqno -setlocal com=sO:\:\ -,mO:\:\ \ ,eO:\:\:,:\:,sO:\>\ -,mO:\>\ \ ,eO:\>\>,:\> - -" Headings {{{2 -syntax region OL1 start=+^[^:\t]+ end=+^[^:\t]+me=e-1 contains=outlTags,BT1,BT2,PT1,PT2,TA1,TA2,UT1,UT2,UB1,UB2,spellErr,SpellErrors,BadWord,OL2 keepend -syntax region OL2 start=+^\t[^:\t]+ end=+^\t[^:\t]+me=s-1 contains=outlTags,BT2,BT3,PT2,PT3,TA2,TA3,UT2,UT3,UB2,UB3,spellErr,SpellErrors,BadWord,OL3 keepend -syntax region OL3 start=+^\(\t\)\{2}[^:\t]+ end=+^\(\t\)\{2}[^:\t]+me=e-3 contains=outlTags,BT3,BT4,PT3,PT4,TA3,TA4,UT3,UT4,UB3,UB4,spellErr,SpellErrors,BadWord,OL4 keepend -syntax region OL4 start=+^\(\t\)\{3}[^:\t]+ end=+^\(\t\)\{3}[^:\t]+me=e-4 contains=outlTags,BT4,BT5,PT4,PT5,TA4,TA5,UT4,UT5,UB4,UB5,spellErr,SpellErrors,BadWord,OL5 keepend -syntax region OL5 start=+^\(\t\)\{4}[^:\t]+ end=+^\(\t\)\{4}[^:\t]+me=e-5 contains=outlTags,BT5,BT6,PT5,PT6,TA5,TA6,UT5,UT6,UB5,UB6,spellErr,SpellErrors,BadWord,OL6 keepend -syntax region OL6 start=+^\(\t\)\{5}[^:\t]+ end=+^\(\t\)\{5}[^:\t]+me=e-6 contains=outlTags,BT6,BT7,PT6,PT7,TA6,TA7,UT6,UT7,UB6,UB7,spellErr,SpellErrors,BadWord,OL7 keepend -syntax region OL7 start=+^\(\t\)\{6}[^:\t]+ end=+^\(\t\)\{6}[^:\t]+me=e-7 contains=outlTags,BT7,BT8,PT7,PT8,TA7,TA8,UT7,UT8,UB7,UB8,spellErr,SpellErrors,BadWord,OL8 keepend -syntax region OL8 start=+^\(\t\)\{7}[^:\t]+ end=+^\(\t\)\{7}[^:\t]+me=e-8 contains=outlTags,BT8,BT9,PT8,PT9,TA8,TA9,UT8,UT9,UB8,UB9,spellErr,SpellErrors,BadWord,OL9 keepend -syntax region OL9 start=+^\(\t\)\{8}[^:\t]+ end=+^\(\t\)\{8}[^:\t]+me=e-9 contains=outlTags,BT9,PT9,TA9,UT9,UB9,spellErr,SpellErrors,BadWord keepend - -" Auto-commands {{{1 -if !exists("autocommand_vo_loaded") - let autocommand_vo_loaded = 1 - au BufNewFile,BufRead *.otl setf outliner -" au CursorHold *.otl syn sync fromstart -" set updatetime=500 -endif - -" The End -" vim600: set foldmethod=marker foldlevel=0: diff --git a/pack/acp/start/vimoutliner/vimoutliner/images/Vimoutliner_logo.png b/pack/acp/start/vimoutliner/vimoutliner/images/Vimoutliner_logo.png deleted file mode 100644 index 5831d93a7d83bcd4bd030e7955c06cb86b32f697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19060 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 V5u0KSk&gfX002ovPDHLkV1nsl(4GJQ diff --git a/pack/acp/start/vimoutliner/vimoutliner/images/Vimoutliner_logo_tiny.png b/pack/acp/start/vimoutliner/vimoutliner/images/Vimoutliner_logo_tiny.png deleted file mode 100644 index 4c942ada9e69e008a5c81ae6cd4f683049a4e943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7036 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 L4K->Jj`9Bk?m-Q2 diff --git a/pack/acp/start/vimoutliner/vimoutliner/images/favicon.ico b/pack/acp/start/vimoutliner/vimoutliner/images/favicon.ico deleted file mode 100644 index fd42fabfcd72a56d5648e3392be574a7161543bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmZ|HJxfAi0LAhD1tBHW3%x>vZWGEoDQE(a@VTw$v2&Y7m7}ItZ;n5jM0n zgf`R|eS-)hFc3~sLXkW?q0XJ{qLKO~Z_7xZt9ol2J5{}H zqgbsKtJ24`UJJ%N+n>ktRMbYTjmPa%86E~8mj&Me--18e?F@q-1U~>dAWK&VILpG` GJ^TS%#eDz( diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/prev/votl_hoist.otl b/pack/acp/start/vimoutliner/vimoutliner/plugin/prev/votl_hoist.otl deleted file mode 100644 index 9b0dd67..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/prev/votl_hoist.otl +++ /dev/null @@ -1,77 +0,0 @@ -Hoisting -What is it? - : Hoisting is a way to focus on a particular area of an outline. Only the - : offspring from a selected parent will be shown. The offspring are - : left-justified just as if they were the top level headings and had no - : parent. -Installation - The hoist plugin is included in the VimOutliner plugin directory - This plugin is disabled by default - See information in the ~/.vimoutlinerrc on how to enable it - Optionally set the hoistParanoia variable - : If you are really paranoid about loosing your data during shakedown - : of vo_hoist.vim, you can add this to your ~/.vimoutlinerrc file. It - : will prevent VO from automatically removing the temporary hoist - : files. This will have a tendency to hugely increase the number of - : files in your working directory (but if you're paranoid... ;) ) - let g:hoistParanoia = 1 -How do I use it? - Hoisting - : Whenever you open a VO document, hoisting will be available. - Invocation - Place the cursor on the parent to be hoisted - ,,h - You will need to hit to accept some informational messages - You should now see the children of the selected parent ready for editing - Treat this document just like a normal .otl file - De-hoisting - : From within the hoisted document you simply need to quit. The - : hoisted data will be saved in place of the old children. The cursor - : will be returned to the hoisted parent. - Invocation - The :q, :wq, :x and ZZ perform a de-hoist operation - A write will automatically be done to save any changes - Manual De-hoisting - : Should the de-hoisting ever fail or should an operator quit Vim (by - : closing the window with the mouse, say), a manual de-hoisting will - : need to be performed. - You can find a currently hoisted parent by searching for __hoist - Place the cursor on the parent with the __hoist tag - ,,H - The edited, hoisted offspring will replace the current offspring - The __hoist tag will be removed -The Hoist Tag - Example Tag - : The hoist tag is added to a hoisted parent for error recovery. It - : includes a filename, a line number and a timestamp. - Example Tag - __hoist:vo_hoist.46.20030816124249.otl - Tag Components - Tag Marker - __hoist: - Easy search and replace - Filename Prefix - vo_hoist. - Needed to comply with VO standards for file naming - Parent Line Number (at time of hoisting) - 46. - Timestamp - 20030816124249 - YYYYMMDDhhmmss - Filename Suffix - .otl - Duh -The Log Files - : Log files of the hoists are created to aid in error recovery should that - : become necessary. They are created in the same directory as the working - : .otl file. - Log Filename - .vo_hoist..log - Example Log Filename - .vo_hoist.test.otl.log - Contents - There is one line per hoist operation - Each is comprised of a parent with a __hoist tag -Limitations - 1 Level Deep - : Until debug is complete, hoisting is limited to one level. diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/prev/votl_hoist.vim b/pack/acp/start/vimoutliner/vimoutliner/plugin/prev/votl_hoist.vim deleted file mode 100755 index c4064d1..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/prev/votl_hoist.vim +++ /dev/null @@ -1,251 +0,0 @@ -"###################################################################### -"# VimOutliner Hoisting -"# Copyright (C) 2003 by Noel Henson noel@noels-lab.com -"# The file is currently an experimental part of Vim Outliner. -"# -"# This program is free software; you can redistribute it and/or modify -"# it under the terms of the GNU General Public License as published by -"# the Free Software Foundation; either version 2 of the License, or -"# (at your option) any later version. -"# -"# This program is distributed in the hope that it will be useful, -"# but WITHOUT ANY WARRANTY; without even the implied warranty of -"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -"# GNU General Public License for more details. -"###################################################################### - -" Load the plugin {{{1 -" mappings {{{1 -map h :call Hoist(line(".")) -map H :call DeHoistThis(line(".")) -"}}}1 -if exists("g:did_vo_hoist") - finish -endif -if !exists("g:hoistParanoia") - let g:hoistParanoia=0 -endif -let g:did_vo_hoist = 1 -" Functions {{{1 -" RemoveTabsLine(line,tabs) {{{2 -" remove specified number of tabs from the beginning of line -function! RemoveTabsLine(line,tabs) - return substitute(getline(a:line),"^\\(\\t\\)\\{".a:tabs."}", "", "") -endfunction -"}}}2 -" MakeTempFilename(line) {{{2 -" return a string to use as the temporary filename for the hoisted area -function! MakeTempFilename(line) - return "vo_hoist.".a:line.strftime(".%Y%m%d%H%M%S").".otl" -endfunction -"}}}2 -" AddHoistFilename(line) {{{2 -" Add a temporary filename to a parent line to indicate hoisting -function! AddHoistFilename(line) - let l:newparent = getline(a:line)." __hoist:".MakeTempFilename(a:line) - call setline(a:line,l:newparent) -endfunction -"}}}2 -"}}}2 -" DeleteHoistFilename(line) {{{2 -" Delete a temporary filename from a parent line -function! DeleteHoistFilename(line) - call setline(a:line,substitute(getline(a:line)," __hoist:.*","","")) -endfunction -"}}}2 -" ExtractHoistFilename(line) {{{2 -" Extract a filename from a hoisted parent -function! ExtractHoistFilename(line) - return substitute(getline(a:line),".* __hoist:","","") -endfunction -"}}}2 -" IsParent(line) {{{2 -" Return 1 if this line is a parent -function! IsParent(line) - return (Ind(a:line)+1) == Ind(a:line+1) -endfunction -"}}}2 -" IsHoistedParent(line) {{{2 -" Return 1 if this line is a parent with hoisted children -function! IsHoistParent(line) - return match(getline(a:line)," __hoist:","") != -1 -endfunction -"}}}2 -" FindParent(line) {{{2 -" Return line if parent, parent line if not -function! FindParent(line) - if IsParent(a:line) - return a:line - else - let l:parentindent = Ind(a:line)-1 - let l:searchline = a:line - while (Ind(l:searchline) != l:parentindent) && (l:searchline > 0) - let l:searchline = l:searchline-1 - endwhile - return l:searchline - endif -endfunction -"}}}2 -" FindLastChild(line) {{{2 -" Return the line number of the last descendent of parent line -function! FindLastChild(line) - let l:parentindent = Ind(a:line) - let l:searchline = a:line+1 - while Ind(l:searchline) > l:parentindent - let l:searchline = l:searchline+1 - endwhile - return l:searchline-1 -endfunction -"}}}2 -"}}}2 -" Hoist(line) {{{2 -" Write the offspring of a parent to a new file, open it and remove the -" leading tabs. -function! Hoist(line) - let l:parent = FindParent(a:line) - if l:parent == 0 - return - endif - call cursor(l:parent,1) - let l:firstline = l:parent+1 - let l:childindent = Ind(l:firstline) - let l:lastline = FindLastChild(l:parent) - let l:filename = MakeTempFilename(l:parent) - echo l:firstline.",".l:lastline."w! ".l:filename - let l:folded = foldclosed(l:parent) - call cursor(l:parent,1) - normal zo - exe l:firstline.",".l:lastline."w! ".l:filename - call AddHoistFilename(l:parent) - silent write - " log what we did in case we need to recover manually - let l:doit = l:parent."write! >> .vo_hoist.".bufname(bufnr("%")).".log" - exe l:doit - let l:parentbuffer = bufnr("%") - "WARNING: switching files - let l:doit = "silent e +%s/^\\\\(\\\t\\\\)\\\\{" - let l:doit = l:doit.l:childindent."}// ".l:filename." | " - let l:doit = l:doit."let b:myParentBuffer = ".l:parentbuffer." | " - let l:doit = l:doit."let b:myParentLine = ".l:parent." | " - let l:doit = l:doit."call cursor(1,1)|" - let l:doit = l:doit."let b:hoisted = 1" - exe l:doit - silent write -endfunction -"}}}2 -" DeleteChildren(line) {{{2 -" Delete the existing offspring of a parent -function! DeleteChildren(line) - let l:parent = FindParent(a:line) - let l:firstline = l:parent+1 - let l:lastline = FindLastChild(l:parent) - exe l:firstline.",".l:lastline."d" -endfunction -"}}}2 -" MakeTabString(n) {{{2 -" Return a string of n tabs -function! MakeTabString(n) - let l:string = "" - let l:i = 0 - while l:i < a:n - let l:string = l:string."\t" - let l:i = l:i +1 - endwhile - return l:string -endfunction -"}}}2 -" AddChildren(line) {{{2 -" Add left-justified children to parent. The filename is extracted from the -" end of the parent line. The parent is assumed to have no children at this -" point. -function! AddChildren(line) - let l:filename = ExtractHoistFilename(a:line) - if filereadable(l:filename) == 1 - if a:line == line("$") - exe "read ".l:filename - if a:line != line("$") - exe a:line+1.",$"." s/^/".MakeTabString(Ind(a:line)+1)."/" - endif - else - exe a:line+1."ma v" - call cursor(a:line,1) - exe "read ".l:filename - if a:line+1 != line("'v") - exe a:line+1.",'v-1"." s/^/".MakeTabString(Ind(a:line)+1)."/" - endif - endif - endif -endfunction -"}}}2 -" DeleteHoistFile(line) {{{2 -" Delete a temporary filename from a parent line -function! DeleteHoistFile(line) - if g:hoistParanoia - return - endif - let l:filename = ExtractHoistFilename(a:line) - call delete(l:filename) - let l:filename = l:filename."~" - call delete(l:filename) -endfunction -"}}}2 -" DeHoistThis(line) {{{2 -" Remove the old children, add the new children and remove the __hoist data -" leading tabs from this file. -function! DeHoistThis(line) - let l:parent = FindParent(a:line) - let l:folded = foldclosed(l:parent) - call cursor(l:parent,1) - if l:folded == l:parent - normal zo - endif - call DeleteChildren(l:parent) - call AddChildren(l:parent) - call DeleteHoistFile(l:parent) - call DeleteHoistFilename(l:parent) - if l:folded == l:parent - normal zc - endif -endfunction -"}}}2 -" DeHoist() {{{2 -" Remove the old children, add the new children and remove the __hoist data -" leading tabs from the calling file. -function! DeHoist() - silent write - if bufexists(b:myParentBuffer) == 0 - return - endif - let l:myParentBuffer = b:myParentBuffer - let l:myParentLine = b:myParentLine - bdelete - " Warning switching files - exe "buffer ".l:myParentBuffer - call cursor(l:myParentLine,1) - let l:parent = FindParent(l:myParentLine) - let l:folded = foldclosed(l:parent) - call cursor(l:parent,1) -" if l:folded == l:parent -" normal zo -" endif - normal zv - silent call DeleteChildren(l:parent) - silent call AddChildren(l:parent) - silent call DeleteHoistFile(l:parent) - silent call DeleteHoistFilename(l:parent) - if l:folded == l:parent - call cursor(l:parent,1) - normal zc - endif - silent write -endfunction -"}}}2 -"}}}1 -" Autocommands {{{1 - au BufReadPost vo_hoist.*.otl cmap wq call DeHoist() - au BufReadPost vo_hoist.*.otl cmap qa call DeHoist() - au BufReadPost vo_hoist.*.otl cmap q call DeHoist() - au BufReadPost vo_hoist.*.otl cmap x call DeHoist() - au BufReadPost vo_hoist.*.otl nmap ZZ :call DeHoist() -"}}}1 -" vim600: set foldlevel=0 foldmethod=marker: diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_checkbox.otl b/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_checkbox.otl deleted file mode 100644 index 0a135b4..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_checkbox.otl +++ /dev/null @@ -1,310 +0,0 @@ -Checkboxes: votl_checkbox -What is it? - : Checkboxes is a plugin for project, task and list managment. It add an - : understanding of check boxes and percentage of task completion to Vim - : Outliner. It adds just three tags and six commands. -Installation - This should already be included in your Vim Outliner package - The newest, stable version is included with this package in the plugin directory - The pluging is already enabled in your ~/.vimoutlinerrc -Tag Syntax - [_] an unchecked item or incomplete task - [X] a checked item or complete task - [-] a canceled item - removes this item/branch from completion calculations - % a placeholder for percentage of completion - n% a percentage of completion, used in calculating parent completion - n%w a percentage with a weighting factor - e.g.: 10%2 - [tag] a tag than can be replaced from a list of tags - [tag] also the default tag name - will be replaced by tag[0] of tag list[0] - [tag] [tag] tags must be separated by whitespace -Example g:cbTags (put in .vimoutlinerrc) - let g:cbTags = [ - \ ['TODO','FEEDBACK','VERIFY','DELEGATED','HOLDING'] - \,['Feature','Enhancement','Bug'] - \,['Low','Normal','High','URGENT'] - \,['Home','Lab','Work','Shopping'] - \] -Checkbox Commands - : The default for VimOutliner is ,, so we will use this - : leader in the command discussions. - ,,cb Create a check box - : This works for the current heading or selected range of lines - : including folds. Visual selection of the range of headings works - : nicely. This command is currently not aware of body text. This - : limited awareness needs to be fixed before this plugin can be - : included in the standard Vim Outliner plugins. - ,,cB Create a check box (even if one exists) - ,,c% Create a checkbox and % symbol - : This works just like ,,cb but add a % symbol for use in completion - : calculations. - ,,cp Create a checkbox and % symbol - : This works just like ,,cb but add a % symbol for use in completion - : calculations; even on childless headings. - ,,cx Change check box state - : If there is a checkbox on the line the cursor is on, change its - : state. If it's checked, uncheck it and vice-versa. Then recompute - : the completion of the entire branch starting from the root parent. - ,,cd Delete a checkbox - : Delete the left-most check box on the selected heading(s). - ,,cz Compute completion - : Starting at the heading the cursor is on, recursively compute the - : completion level of all sub-headings. - ,,c1 Set completion to 10% - : Set the completion to 10%, if a percentage already exists. - ,,c2 Set completion to 20% - : Set the completion to 20%, if a percentage already exists. - ,,c3 Set completion to 30% - : Set the completion to 30%, if a percentage already exists. - ,,c4 Set completion to 40% - : Set the completion to 40%, if a percentage already exists. - ,,c5 Set completion to 50% - : Set the completion to 50%, if a percentage already exists. - ,,c6 Set completion to 60% - : Set the completion to 60%, if a percentage already exists. - ,,c7 Set completion to 70% - : Set the completion to 70%, if a percentage already exists. - ,,c8 Set completion to 80% - : Set the completion to 80%, if a percentage already exists. - ,,c9 Set completion to 90% - : Set the completion to 90%, if a percentage already exists. - ,,c+ Increment the completion by 10% - : Increment the completion by 10%, if a percentage already exists. - ,,c- Decrement the completion by 10% - : Decrement the completion by 10%, if a percentage already exists. - ,,ct Set tag to next tag in current tag list - : Set the tag under the cursor to the next tag in the list that - : contains the current tag. This command is not mapped if g:cbTags - : does not exist. - ,,cT Set tag to next tag list - : Set the tag under the cursor to the first tag in the next tag list. - : This command is not mapped if g:cbTags does not exist. -How do I use it? - Start with a simple example - : Let's start with planning a small party; say a barbeque. - Make the initial outline - Barbeque - Guests - Bill and Barb - Larry and Louise - Marty and Mary - Food - Chicken - Ribs - Corn on the cob - Beverages - Soda - Iced Tea - Beer - Party Favors - Squirt guns - Hats - Name tags - Materials - Paper Plates - Napkins - Trash Containers - Add the check boxes - : This can be done by visually selecting them and typing ,,cb. - : When done, you should see this: - [_] Barbeque - [_] Guests - [_] Bill and Barb - [_] Larry and Louise - [_] Marty and Mary - [_] Food - [_] Chicken - [_] Ribs - [_] Corn on the cob - [_] Beverages - [_] Soda - [_] Iced Tea - [_] Beer - [_] Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] Materials - [_] Paper Plates - [_] Napkins - [_] Trash Containers - Now check off what's done - : Checking off what is complete is easy with the ,,cx command. - : Just place the cursor on a heading and ,,cx it. Now you can see - : what's done as long as the outline is fully expanded. - [_] Barbeque - [X] Guests - [X] Bill and Barb - [X] Larry and Louise - [X] Marty and Mary - [_] Food - [X] Chicken - [X] Ribs - [_] Corn on the cob - [_] Beverages - [_] Soda - [X] Iced Tea - [X] Beer - [_] Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] Materials - [X] Paper Plates - [_] Napkins - [X] Trash Containers - Getting more advanced - Now summarize what's done - : You can summarize what is done with the ,,cz command. Place the - : cursor on the 'Barbeque' heading and ,,cz it. The command will - : recursively process the outline and update the check boxes of - : the parent headlines. You should see: - : (Note: the only change is on the 'Guests' heading. It changed - : because all of its children are complete.) - [_] Barbeque - [X] Guests - [X] Bill and Barb - [X] Larry and Louise - [X] Marty and Mary - [_] Food - [X] Chicken - [X] Ribs - [_] Corn on the cob - [_] Beverages - [_] Soda - [X] Iced Tea - [X] Beer - [_] Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] Materials - [X] Paper Plates - [_] Napkins - [X] Trash Containers - Add percentages for a better view - : You can get a much better view of what's going on, especially - : with collapsed headings, if you add percentages. Place a 0% on - : each heading that has children like this: - [_] 59% Barbeque - [X] 100% Guests - [X] Bill and Barb - [X] Larry and Louise - [X] Marty and Mary - [_] 66% Food - [X] Chicken - [X] Ribs - [_] Corn on the cob - [_] 66% Beverages - [_] Soda - [X] Iced Tea - [X] Beer - [_] 0% Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] 66% Materials - [X] Paper Plates - [_] Napkins - [X] Trash Containers - Now compute the percentage of completion - : After adding the 0% symbols, place the cursor on the 'Barbeque' - : heading and execute ,,cz as before. Keep in mind that the - : recursive percentages are weighted. You should see: - [_] 59% Barbeque - [X] 100% Guests - [X] Bill and Barb - [X] Larry and Louise - [X] Marty and Mary - [_] 66% Food - [X] Chicken - [X] Ribs - [_] Corn on the cob - [_] 66% Beverages - [_] Soda - [X] Iced Tea - [X] Beer - [_] 0% Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] 66% Materials - [X] Paper Plates - [_] Napkins - [X] Trash Containers - Complete a few more just for fun - : Mark Salad and Soda and recompute with ,,cz and you should - : see the ouline below. - : - : Try playng around with zc and zo to see the effects of opening - : and closing folds. Even if you place the cursor on 'Barbeque' - : and zo it, you still have a good understanding of how complete - : the project is. - [_] 66% Barbeque - [X] 100% Guests - [X] Bill and Barb - [X] Larry and Louise - [X] Marty and Mary - [_] 66% Food - [X] Chicken - [X] Ribs - [_] Corn on the cob - [X] 100% Beverages - [X] Soda - [X] Iced Tea - [X] Beer - [_] 0% Party Favors - [_] Squirt guns - [_] Hats - [_] Name tags - [_] 66% Materials - [X] Paper Plates - [_] Napkins - [X] Trash Containers - Getting way more advanced - Weighted Tasks - Here is a simple outline to track a project - [_] 22% Garage Upgrade - [_] 66% Clean out old junk - [X] 100% empty garage - [X] 100% sort junk - [_] 0% dispose of junk - [_] 0% Build Shelves - [_] 0% Oranize Junk - [_] 0% oranize saved junk - [_] 0% put junk on shelves - What if some tasks take more effort? - : Assume that you know that it will take twice as long to sort - : junk as it does to remove it from the garage or to dispose - : of it. This can be represented with weights. Notice the - : completion percentage of 'Clean out old junk' once a weight - : has been added. Each percentage can be weighted. - [_] 25% Garage Upgrade - [_] 75% Clean out old junk - [X] 100% empty garage - [X] 100%2 sort junk - [_] 0% dispose of junk - [_] 0% Build Shelves - [_] 0% Oranize Junk - [_] 0% oranize saved junk - [_] 0% put junk on shelves - Complex weighting - [_] 83% Garage Upgrade - [_] 75%2 Clean out old junk - [X] 100% empty garage - [X] 100%2 sort junk - [_] 0% dispose of junk - [X] 100%2 Build Shelves - [_] 66% Oranize Junk - [X] 100%2 oranize saved junk - [_] 0% put junk on shelves - Tags: Add more information to a heading - : Additional information and workflow information can easily - : be added to headings with tags. The command ,,ct can be used - : to cycle a tag among it sibling tags in g:cbTags. ,,cT can - : be be used to cycle a tag to a different list of sibling - : tags. - My Software Project - [_] 33% To Do - [X] Misspellings in documention [Bug] [High] - [_] Installation infects all networked systems with app [Feature] [Normal] - [_] Clean garage [Low] [@Home] diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_checkbox.vim b/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_checkbox.vim deleted file mode 100755 index e97ae57..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_checkbox.vim +++ /dev/null @@ -1,475 +0,0 @@ -"###################################################################### -"# VimOutliner Checkboxes -"# Copyright (C) 2003 by Noel Henson noel@noels-lab.com -"# The file is currently an experimental part of Vim Outliner. -"# -"# This program is free software; you can redistribute it and/or modify -"# it under the terms of the GNU General Public License as published by -"# the Free Software Foundation; either version 2 of the License, or -"# (at your option) any later version. -"# -"# This program is distributed in the hope that it will be useful, -"# but WITHOUT ANY WARRANTY; without even the implied warranty of -"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -"# GNU General Public License for more details. -"###################################################################### - -" mappings {{{1 -" insert a chechbox -noremap cb :call SafelyInsertCheckBox() -noremap c% :call SafelyInsertCheckBoxPercent() -noremap cp :call SafelyInsertCheckBoxPercentAlways() -noremap cB :call InsertCheckBox() - -" delete a chechbox -noremap cd :call DeleteCheckbox() - -" switch the status of the box and adjust percentages -if !exists('g:vo_checkbox_fast_calc') || g:vo_checkbox_fast_calc == 1 - " Use new and faster method - noremap cx :call SwitchBox() call CalculateMyBranch(line(".")) - noremap c+ :call IncPercent(".") call CalculateMyBranch(line(".")) - noremap c- :call DecPercent(".") call CalculateMyBranch(line(".")) - noremap c1 :call SetPercent(".",10)call CalculateMyBranch(line('.')) - noremap c2 :call SetPercent(".",20)call CalculateMyBranch(line('.')) - noremap c3 :call SetPercent(".",30)call CalculateMyBranch(line('.')) - noremap c4 :call SetPercent(".",40)call CalculateMyBranch(line('.')) - noremap c5 :call SetPercent(".",50)call CalculateMyBranch(line('.')) - noremap c6 :call SetPercent(".",60)call CalculateMyBranch(line('.')) - noremap c7 :call SetPercent(".",70)call CalculateMyBranch(line('.')) - noremap c8 :call SetPercent(".",80)call CalculateMyBranch(line('.')) - noremap c9 :call SetPercent(".",90)call CalculateMyBranch(line('.')) -else - " Use the old method - noremap cx :call SwitchBox() call NewHMD(FindRootParent(line("."))) - noremap c+ :call IncPercent(".") call NewHMD(FindRootParent(line("."))) - noremap c- :call DecPercent(".") call NewHMD(FindRootParent(line("."))) - noremap c1 :call SetPercent(".",10)call NewHMD(FindRootParent(line("."))) - noremap c2 :call SetPercent(".",20)call NewHMD(FindRootParent(line("."))) - noremap c3 :call SetPercent(".",30)call NewHMD(FindRootParent(line("."))) - noremap c4 :call SetPercent(".",40)call NewHMD(FindRootParent(line("."))) - noremap c5 :call SetPercent(".",50)call NewHMD(FindRootParent(line("."))) - noremap c6 :call SetPercent(".",60)call NewHMD(FindRootParent(line("."))) - noremap c7 :call SetPercent(".",70)call NewHMD(FindRootParent(line("."))) - noremap c8 :call SetPercent(".",80)call NewHMD(FindRootParent(line("."))) - noremap c9 :call SetPercent(".",90)call NewHMD(FindRootParent(line("."))) -endif - -" calculate the proportion of work done on the subtree -noremap cz :call NewHMD(FindRootParent(line("."))) - -" tag list key mappings -if exists("g:cbTags") - noremap ct :call SetNextTag() - noremap cT :call SetNextList() -endif - -"}}}1 -" Load guard for functions {{{1 -if exists('s:loaded') - finish -endif -let s:loaded = 1 - -" InsertCheckBox() {{{1 -" Insert a checkbox at the beginning of a header without disturbing the -" current folding. -function! InsertCheckBox() - let @x = "[_] " - normal! ^"xP -endfunction -"}}}1 -" Safely InsertCheckBox() {{{1 -" Insert a checkbox at the beginning of a header without disturbing the -" current folding only if there is no checkbox already. -function! SafelyInsertCheckBox() - if match(getline("."),"^\t\t*\[<>:;|\]") != -1 - return - endif - if match(getline("."),"[\[X_\]]") == -1 - let @x = "[_] " - normal! ^"xP - endif -endfunction -"}}}1 -" Safely InsertCheckBoxPercent() {{{1 -" Insert a checkbox and % sign at the beginning of a header without disturbing -" the current folding only if there is no checkbox already. -function! SafelyInsertCheckBoxPercent() - if match(getline("."),"^\t\t*\[<>:;|\]") != -1 - return - endif - if match(getline("."), "[\[X_\]]") == -1 - if Ind(line(".")+1) > Ind(line(".")) - let @x = "[_] % " - else - let @x = "[_] " - endif - normal! ^"xP - endif -endfunction -"}}}1 -" Safely InsertCheckBoxPercentAlways() {{{1 -" Insert a checkbox and % sign at the beginning of a header without disturbing -" the current folding only if there is no checkbox already. Include the -" checkbox even on childless headings. -function! SafelyInsertCheckBoxPercentAlways() - if match(getline("."),"^\t\t*\[<>:;|\]") != -1 - return - endif - if match(getline("."), "[\[X_\]]") == -1 - let @x = "[_] % " - normal! ^"xP - endif -endfunction -"}}}1 -" SetBox(char) {{{1 -" Switch the state of the checkbox on the current line. -function! SetBox(char) - substitute/\[.\]/\="[".expand(a:char)."]"/ - if a:char == 'X' - call SetPercent(".",100) - elseif a:char == '_' - call SetPercent(".",0) - endif -endfunction - -"}}}1 -" SwitchBox() {{{1 -" Switch the state of the checkbox on the current line. -function! SwitchBox() - let l:line = getline(".") - let questa = strridx(l:line,"[_]") - let questb = strridx(l:line,"[X]") - if (questa != -1) || (questb != -1) - if (questa != -1) - call SetBox('X') - else - call SetBox('_') - endif - endif -endfunction -"}}}1 -" DeleteCheckbox() {{{1 -" Delete a checkbox if one exists -function! DeleteCheckbox() - let questa = strridx(getline("."),"[_]") - let questb = strridx(getline("."),"[X]") - if (questa != -1) || (questb != -1) - if (questa != -1) - substitute/\(^\s*\)\[_\] \(.*\)/\1\2/ - else - substitute/\(^\s*\)\[X\] \(.*\)/\1\2/ - endif - endif -endfunction -"}}}1 -" Ind(line) {{{1 -" Return the index of the line. -" Remove it when using the new version of VO -function! Ind(line) - return indent(a:line) / &tabstop -endf -" FindMyParent(line) {{{1 -" returns the line number of the parent of the current node -function! FindMyParent(line) - let l:mylevel = Ind(a:line) - if l:mylevel == 0 - return (a:line) - endif - let l:i = a:line - while Ind(l:i) >= l:mylevel - let l:i -= 1 - endwhile - return l:i -endf - -" FindRootParent(line) {{{1 -" returns the line number of the root parent for any child -function! FindRootParent(line) - if Ind(a:line) == 0 - return (a:line) - endif - let l:i = a:line - while l:i > 1 && Ind(l:i) > 0 - let l:i = l:i - 1 - endwhile - return l:i -endf - -" LimitPercent(percent) {{{1 -" Limits percentage values to between 0 and 100 -function! LimitPercent(val) - if a:val > 100 - return 100 - elseif a:val < 0 - return 0 - else - return a:val - endif -endf - -" GetPercent(line) {{{1 -" Get the percent complete from a line -function! GetPercent(line) - let l:proportion = 0 - let mbegin=match(getline(a:line), " [0-9]*%") - if mbegin - let mend=matchend(getline(a:line), " [0-9]*%") - let l:proportion=getline(a:line)[mbegin+1 : mend-1] - let l:proportion=str2nr(l:proportion) - endif - return l:proportion -endf - -" SetPercent(line,proportion) {{{1 -" Set the percent complete for a line -function! SetPercent(line,proportion) - let mbegin=match(getline(a:line), " [0-9]*%") - if mbegin - call setline(a:line,substitute(getline(a:line)," [0-9]*%"," ".a:proportion."%","")) - endif -endf - -" IncPercent(line) {{{1 -" Increments the percent doneness by 10% -function! IncPercent(line) - if match(getline(a:line), " [0-9]*%") - call SetPercent(a:line,LimitPercent(GetPercent(a:line)+10)) - endif -endf - -" DecPercent(line) {{{1 -" Decrements the percent doneness by 10% -function! DecPercent(line) - if match(getline(a:line), " [0-9]*%") - let l:percent = GetPercent(a:line) - call setline(a:line,substitute(getline(a:line),"\\[X\\]","[_]","")) - call SetPercent(a:line,LimitPercent(l:percent-10)) - endif -endf - -" ComputePW(line,count,done) {{{1 -" Computes proportion and weight of a node -" Returns (proportion,weight) proportion could be a flag of -1 -function! ComputePW(line,count,done) - let l:proportion=0 - let l:haspercent = 0 - " get the percent - let mbegin=match(getline(a:line), " [0-9]*%") - if mbegin != -1 - let l:haspercent = 1 - let mend=matchend(getline(a:line), " [0-9]*%") - let l:proportion=str2nr(getline(a:line)[mbegin+1 : mend-1]) - endif - " get the weight - let l:weight=1 - let mbegin=match(getline(a:line), "%[0-9]\\+") - if mbegin != -1 - let mend=matchend(getline(a:line), "%[0-9]\\+\s") - let l:weight=str2nr(getline(a:line)[mbegin+1 : mend-1]) - endif - " compute the proportion - if a:count>0 - let l:proportion = ((a:done*100)/a:count)/100 - elseif match(getline(a:line),"\\[X\\]") != -1 - let l:proportion = 100 - elseif match(getline(a:line),"\\[-\\]") != -1 - let l:weight = 0 - endif - " update non-ignored items - let l:questa = strridx(getline(a:line),"[-]") - if l:questa == -1 - call setline(a:line,substitute(getline(a:line)," [0-9]*%"," ".l:proportion."%","")) - endif - " Limit proportion to 0 or 100 if there is not a percentage sign - if !haspercent && (!exists('g:vo_checkbox_fast_calc') || g:vo_checkbox_fast_calc == 1) - let l:proportion = l:proportion == 100 ? l:proportion : 0 - endif - " update the completion - if l:questa != -1 - return [100,l:weight] - elseif l:proportion == 100 - call setline(a:line,substitute(getline(a:line),"\\[_\\]","[X]","")) - return [100,l:weight] - elseif l:proportion == 0 && a:count == 0 - if match(getline(a:line),"\\[X\\]") != -1 - return [100,l:weight] - elseif match(getline(a:line),"\\[_\\]") != -1 - return [0,l:weight] - else - return [-1,l:weight] - endif - else - call setline(a:line,substitute(getline(a:line),"\\[X\\]","[_]","")) - return [l:proportion,l:weight] - endif -endf - -" CalculateMyChildren(line) {{{1 -" Calculates percent completion only on the immediate children of the -" parent specified by line. -function! CalculateMyChildren(line) - let l:done = 0 - let l:count = 0 - let l:line = a:line + 1 - let l:mylevel = Ind(a:line) - let l:childlevel = l:mylevel+1 - while l:mylevel < Ind(l:line) " I have children - if l:childlevel == Ind(l:line) - let l:childstat = ComputePW(l:line,0,0) - let l:childdoneness = l:childstat[0] * l:childstat[1] - if l:childdoneness >= 0 - let l:done += l:childdoneness - let l:count += l:childstat[1] - endif - endif - let l:line += 1 - endwhile - return ComputePW(a:line,l:count,l:done) " returns with (proportion,weight) -endf - -" CalculateMyBranch(line) {{{1 -" Calculate from the leaf, up unlke NewHMD -function! CalculateMyBranch(line) - call NewHMD(a:line) " compute and adjust my children, if I have any - let l:line = a:line - while Ind(l:line) > 0 - let l:line = FindMyParent(l:line) - call CalculateMyChildren(l:line) - endwhile -endf - -" NewHMD(line) {{{1 -" (New How Many Done) -" Calculates proportion of already done work in the subtree -" Recursive, but slow because it computes an entire branch of an outline -" from level 1. -" Returns (proportion,weight) proportion could be a flag of -1 -function! NewHMD(line) - let l:done = 0 - let l:count = 0 - let l:line = a:line+1 - let l:mylevel = Ind(a:line) - let l:childlevel = l:mylevel+1 - while l:mylevel < Ind(l:line) " I have children - if l:childlevel == Ind(l:line) - let l:childstat = NewHMD(l:line) - let l:childdoneness = l:childstat[0] * l:childstat[1] - if l:childdoneness >= 0 - let l:done += l:childdoneness - let l:count += l:childstat[1] - endif - endif - let l:line += 1 - endwhile - return ComputePW(a:line,l:count,l:done) " returns with (proportion,weight) -endf - -" Experimental Heading Tags {{{1 - -if !exists('g:cbTags') - finish -endif - -" GetTag() {{{2 -" return the tag word under the cursor -function! GetTag() - let word = expand("") - if word[0] == '[' && word[-1:] == ']' - return word[1:-2] - endif - return "" -endfunction - -" WhereInLists(word) {{{2 -" return a single-entry list with a pair of values [listIndex,tagIndex] -" return -1,-1 if tag word not found -function! WhereInLists(word) - let lidx = 0 - for list in g:cbTags - let tidx = index(list,a:word) - if tidx >= 0 - return [lidx,tidx] - endif - let lidx += 1 - endfor - return [-1,-1] -endfunction - -" NextTagIdx(lidx,tidx) {{{2 -" return the index of the next tag in the current list -function! NextTagIdx(lidx,tidx) - if a:tidx >= 0 - let llen = len(g:cbTags[a:lidx]) - let tidx = (a:tidx + 1)%llen - endif - return tidx -endfunction - -" GetNextTag(word) {{{2 -" return the next tag word (from a:word) in the list -function! GetNextTag(word) - if a:word == 'tag' - return g:cbTags[0][0] - endif - let liti = WhereInLists(a:word) - if liti[1] == -1 - return "" - endif - let liti[1] = NextTagIdx(liti[0],liti[1]) - let nextword = g:cbTags[liti[0]][liti[1]] - return nextword -endfunction - -" SetNextTag() {{{2 -" set the current tag to the next tag in the same list -" this is circular, the last tag will roll to the first tag -function! SetNextTag() - let oldtag = GetTag() - let newtag = GetNextTag(oldtag) - if newtag == "" - return - endif - let sub = "normal!ci[".newtag - exec sub -endfunction - -" NextListIdx(lidx) {{{2 -" return the index of the next list -function! NextListIdx(lidx) - if a:lidx >= 0 - let llen = len(g:cbTags) - let lidx = (a:lidx + 1)%llen - endif - return lidx -endfunction - -" GetNextList(word) {{{2 -" return the next tag word (from a:word) in the list -function! GetNextList(word) - if a:word == 'tag' - return g:cbTags[0][0] - endif - let liti = WhereInLists(a:word) - if liti[1] == -1 - return "" - endif - let liti[0] = NextListIdx(liti[0]) - let nextword = g:cbTags[liti[0]][0] - return nextword -endfunction - -" SetNextList() {{{2 -" set the current tag to the first tag in the next list -" this is circular, the last list will roll to the first list -function! SetNextList() - let oldtag = GetTag() - let newtag = GetNextList(oldtag) - if newtag == "" - return - endif - let sub = "normal!ci[".newtag - exec sub -endfunction -" vim600: set foldlevel=0 foldmethod=marker: diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_clock.vim b/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_clock.vim deleted file mode 100644 index fe16968..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_clock.vim +++ /dev/null @@ -1,139 +0,0 @@ -"###################################################################### -"# VimOutliner Clock -"# Copyright (C) 2011 by Daniel Carl -"# The file is currently an experimental part of Vim Outliner. -"# -"# This program is free software; you can redistribute it and/or modify -"# it under the terms of the GNU General Public License as published by -"# the Free Software Foundation; either version 2 of the License, or -"# (at your option) any later version. -"# -"# This program is distributed in the hope that it will be useful, -"# but WITHOUT ANY WARRANTY; without even the implied warranty of -"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -"# GNU General Public License for more details. -"###################################################################### -" Shortlog{{{1 -" -" This plugin of vimoutliner allow the simple tracking of times and the -" calculation of them in seconds, minutes, hours or days -" Exmaple : -" May -> 64.75 h -" Working time week 51 -> 46.00 h -" Working time week 52 -> 18.75 h -" 2010-05-03 [08:00:00 -- 17:45:00] -> 9.75 h -" 2010-05-04 [09:00:00 -- 18:00:00] -> 9.00 h -" -" TODO: Use better date calculation to track also time around 00:00 -" [23:00:00 -- 03:00:00] that will at the time lead to negative -" hours. -" TODO: change the clocking format so that times over several days could -" be calculated - [2010-05-03 08:00:00 -- 2010-05-23 26:30:45] or -" a shorter dateformat - this seems to need a more complex -" datehandling -" TODO: write a helppage for the vimoutliner that describes the votd_clock -" TODO: allow the user to select his own dateformat -"}}}1 -" ClockStart(space) {{{1 -" Insert a space, then the datetime. -function! ClockStart(space) - let @x = "" - if a:space == 1 - let @x = " " - endif - let @x = @x . strftime("%Y-%m-%d [%T -- %T] ->") - normal! "xp -endfunction -"}}}1 -" ClockStop() {{{1 -" Insert a space, then the datetime. -function! ClockStop() - if match(getline("."), "\\[.* -- .*\\]\\s*-\>") != -1 - call setline(".",substitute(getline(".")," -- .*]\\s*-\>"," -- ".strftime("%T] ->"),"")) - endif -endfunction -"}}}1 -" CalculateSeconds(str) {{{1 -" Calculates the seconds between the start and the end time. -function! CalculateSeconds(str) - let l:parts = split(a:str,"\ --\ ") - let l:startparts = split(l:parts[0],":") - let l:endparts = split(l:parts[1],":") - - let l:seconds = (str2nr(l:endparts[2]) - str2nr(l:startparts[2])) - let l:seconds = (str2nr(l:endparts[1]) - str2nr(l:startparts[1])) * 60 + l:seconds - let l:seconds = (str2nr(l:endparts[0]) - str2nr(l:startparts[0])) * 3600 + l:seconds - return l:seconds -endfunction -" }}}1 -" CalculateDuration() {{{1 -" insert date time -function! CalculateDuration(line) - let l:seconds=0 - let l:count=0 - let l:i = 1 - while Ind(a:line) < Ind(a:line+l:i) - if (Ind(a:line)+1) == (Ind(a:line+l:i)) - let l:childseconds = CalculateDuration(a:line+l:i) - if l:childseconds >= 0 - let l:seconds = l:seconds + l:childseconds - let l:count = l:count+1 - endif - endif - let l:i = l:i+1 - endwhile - - " if no childs found calculate the seconds for the line - let l:lineString = getline(a:line) - if match(l:lineString,"\\s*-\>") != -1 - let l:times = matchstr(l:lineString,"\\[.* -- .*\\]\\s*-\>") - if l:times != "" - " calculate the real time difference - let l:seconds = CalculateSeconds(substitute(l:times,"\\[\\(.*\\)\\]","\\1","")) - endif - " don't add summarized time to text lines - if match(l:lineString,"^\t*[;:<>]") == -1 - if match(l:lineString," -\> [0-9 .]*s") != -1 - call setline(a:line,substitute(l:lineString," -\>.*s"," -> ".l:seconds." s","")) - elseif match(getline(a:line)," -\> [0-9 .]*m") != -1 - call setline(a:line,substitute(l:lineString," -\>.*m"," -> ".printf("%.2f",l:seconds/60.0)." m","")) - elseif match(getline(a:line)," -\> [0-9 .]*d") != -1 - call setline(a:line,substitute(l:lineString," -\>.*"," -> ".printf("%.2f",(l:seconds/86400.0))." d","")) - else - call setline(a:line,substitute(l:lineString," -\>.*"," -> ".printf("%.2f",(l:seconds/3600.0))." h","")) - endif - endif - " else - " return -1 - endif - return l:seconds -endf -"}}}1 -" FindRootParent(line) {{{1 -" returns the line number of the root parent for any child -function! FindRootParent(line) - if Ind(a:line) == 0 - return (a:line) - endif - let l:i = a:line - while l:i > 1 && Ind(l:i) > 0 - let l:i = l:i - 1 - endwhile - return l:i -endf -"}}}1 -" UpdateTimes() {{{1 -" initiates the update of all times in the tree where the cursur is located -function! UpdateTimes() - call CalculateDuration(FindRootParent(line("."))) -endf -"}}}1 -" Mappings {{{1 -nmap cs $:call ClockStart(1) -imap cs ~x:call ClockStart(0)a -nmap cS $:call ClockStop():call UpdateTimes() -imap cS ~x:call ClockStop():call UpdateTimes()i -nmap cu $:call UpdateTimes() -"}}}1 -" The End -" vim600: set foldmethod=marker foldlevel=0: diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_format.vim b/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_format.vim deleted file mode 100755 index a59fb33..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_format.vim +++ /dev/null @@ -1,157 +0,0 @@ -"###################################################################### -"# VimOutliner Format plugin -"# Copyright (C) 2011 by Jostein Berntsen -"# The file is currently an experimental part of Vim Outliner. -"# -"# This program is free software; you can redistribute it and/or modify -"# it under the terms of the GNU General Public License as published by -"# the Free Software Foundation; either version 2 of the License, or -"# (at your option) any later version. -"# -"# This program is distributed in the hope that it will be useful, -"# but WITHOUT ANY WARRANTY; without even the implied warranty of -"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -"# GNU General Public License for more details. -"###################################################################### -" Documentation{{{1 -" -" This script inserts bullets, dashes, and arrows in front of lines, including -" VO body text. To insert markers for several lines, select the lines with V -" and execute the mapping. Indents will be kept as they are. -" You can also use the MakeText function to make body text from headers or -" lists. -" -" There are also functions for -" 1) Aligning text in a paragraph to a level 1 header -" 2) Insert checkboxes for all headings in a paragraph -" 3) Indent text in a paragraph/branch to the right -" 4) Indent text in a paragraph/branch to the left -" -"}}}1 -" Load guard for functions {{{1 -if exists("g:loaded_votl_format") || &cp - finish -endif -let g:loaded_votl_format= 1 -let s:keepcpo = &cpo -set cpo&vim - -" Mappings {{{1 - -""" Command mappings -" -" Insert bullets on selected text -map :call InsertBullet() -" Insert dashes on selected text -map :call InsertDash() -" Insert arrows on selected text -map :call InsertArrow() -" Insert colons before selected text -map :call MakeText() -" Align text in a paragraph and indent 1 level -map V}k:leV}> -" Insert checkboxes for text lines in a paragraph -map V}k,,cb -" Indent text in a paragraph 1 level to the right and keep indentation -map :call VOindentright() -" Indent text in a paragraph 1 level to the level and keep indentation -map :call VOindentleft() - -"}}}1 -" InsertBullet() {{{1 -" Insert bullets on selected text. - -function! InsertBullet() - if match(getline("."),"^[\t]*:") != -1 - let @x = ": * " - normal! ^"xPex - else - let @x = "* " - normal! ^"xP - endif -endfunction - -"}}}1 -" InsertDash() {{{1 -" Insert dashes on selected text. - -function! InsertDash() - if match(getline("."),"^[\t]*:") != -1 - let @x = ": - " - normal! ^"xPex - else - let @x = "- " - normal! ^"xP - endif -endfunction - -"}}}1 -" InsertArrow() {{{1 -" Insert arrows on selected text. - -function! InsertArrow() - if match(getline("."),"^[\t]*:") != -1 - let @x = ": --> " - normal! ^"xPex - else - let @x = "--> " - normal! ^"xP - endif -endfunction - -"}}}1 -" MakeText() {{{1 -" Make selected lines body text. - -function! MakeText() - let @x = ":" - normal! ^"xP -endfunction - -"}}}1 -" VOindentright() {{{1 -" Indent branch 1 level to the right. - -function! VOindentright() - let thisLine = line(".") - if (foldclosed(thisLine) == -1) && IsParent(thisLine) - normal! zc - let fold_cursor = getpos(".") - normal! >> - let get_cursor = getpos(".") - call setpos('.',fold_cursor) - normal! zo - call setpos('.',get_cursor) - set foldlevel=3 - else - normal! >> - endif -endfunction - - -"}}}1 -" VOindentleft() {{{1 -" Indent branch 1 level to the left. - -function! VOindentleft() - let thisLine = line(".") - if (foldclosed(thisLine) == -1) && IsParent(thisLine) - normal! zc - let fold_cursor = getpos(".") - normal! << - let get_cursor = getpos(".") - call setpos('.',fold_cursor) - normal! zo - call setpos('.',get_cursor) - set foldlevel=3 - else - normal! << - endif -endfunction - -"}}}1 -" The End -" vim600: set foldmethod=marker foldlevel=0: - - - diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_gtd.vim b/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_gtd.vim deleted file mode 100644 index acdef8b..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_gtd.vim +++ /dev/null @@ -1,219 +0,0 @@ -"###################################################################### -"# VimOutliner GTD -"# Copyright (C) 2003 by Noel Henson noel@noels-lab.com -"# The file is currently an experimental part of Vim Outliner. -"# -"# This program is free software; you can redistribute it and/or modify -"# it under the terms of the GNU General Public License as published by -"# the Free Software Foundation; either version 2 of the License, or -"# (at your option) any later version. -"# -"# This program is distributed in the hope that it will be useful, -"# but WITHOUT ANY WARRANTY; without even the implied warranty of -"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -"# GNU General Public License for more details. -"###################################################################### - -" InsertElem() {{{1 -" Insert a elem without disturbing the current folding. -function! InsertElem(elem) - let @x = a:elem - normal! ^"xP -endfunction -"}}}1 - -" DeleteCheckbox() {{{1 -" Delete a checkbox with all its marks (team/completion) -" if one exists -function! DeleteCheckbox() - :-1/\[[X_?-]\%(,[<>=] [^]]*\)\?\] \%(\d*%\)\?/s/// -endfunction -"}}}1 - -let g:reOutline = "^\t\+\[<>:;|\]" -let g:reBox = "[\[X_?-\]" -let g:reTeam = ",\[<>=\] \[^]\]*" -let g:rePercent = "\\d*% " - -" Safe Insert *Box() {{{1 -" Insert a element at the beginning of a header without disturbing the -" current folding only if there is no element already. -function! InsertSwitch(elem) - if match(getline("."),g:reOutline) != -1 - return - endif -" if match(getline("."),"[".a:elem."\\%(".g:reTeam."\\)\\?"."] ") != -1 -" return -" endif - if match(getline("."),g:reBox."\\%(".g:reTeam."\\)\\?"."] ") != -1 - substitute/\[./\="[".a:elem/ - else - call InsertElem("[".a:elem."] ") - endif -endfunction -"}}}1 - -" Safe Add Team Indicator() {{{1 -" Insert a work with("="), for (">"), waiting for ("<") -" in a checkbox (created if needed) at the beginning of a header -" without disturbing the current folding. -function! SafeAddTeam(elem) - if match(getline("."),g:reOutline) != -1 - return - endif - if match(getline("."),g:reBox.g:reTeam."] ") != -1 - return - endif - if match(getline("."),g:reBox."] ") != -1 - substitute/\[[X_?-]/\=submatch(0).",".a:elem." "/ - else - call InsertElem("[_".",".a:elem." "."] ") - endif -endfunction -"}}}1 - -" Safe InsertCheckBoxPercent() {{{1 -" Insert a checkbox and % sign at the beginning of a header without disturbing -" the current folding -function! SafeAddPercent() -" if Ind(line(".")+1) <= Ind(line(".")) -" return -" endif - if match(getline("."),g:reOutline) != -1 - return - endif - if match(getline("."),g:reBox."\\%(".g:reTeam."\\)\\?"."] ".g:rePercent) != -1 - return - endif - if match(getline("."),g:reBox."\\%(".g:reTeam."\\)\\?"."] ") != -1 - substitute/\[[^]]\+\] /&% / - else - call InsertElem("[_] % ") - endif -endfunction -"}}}1 - -" Ind(line) {{{1 -" Return the index of the line. -" Remove it when using the new version of VO -function! Ind(line) - return indent(a:line) / &tabstop -endf -"}}}1 - -" FindRootParent(line) {{{1 -" returns the line number of the root parent for any child -function! FindRootParent(line) - let l:i = a:line - while l:i > 1 && Ind(l:i) > 0 - let l:i -= 1 - endwhile - return l:i -endf -"}}}1 - -" NewHMD(line) {{{1 -" (How Many Done) -" Calculates proportion of already done work in the subtree -function! NewHMD(line) - let l:done = 0 " checkboxes - let l:count = 0 " number of elems : for % - let l:i = 1 " line counting - let l:proportion = 0 " % : for checkboxes (<100 or 100 ?) and % - let l:lineindent = Ind(a:line) - - " look recursively - - while Ind(a:line+l:i) > l:lineindent - if Ind(a:line+l:i) == l:lineindent + 1 - let l:childdoneness = NewHMD(a:line+l:i) - if l:childdoneness >= 0 - let l:done += l:childdoneness - let l:count += 1 - endif -" echomsg "->".a:line."/".(a:line+l:i)."/ [".l:childdoneness."]-[".l:count."]" - else -" echomsg "(skip) ->".a:line."/".(a:line+l:i) - endif - let l:i += 1 - endwhile - - " update % - - if l:count > 0 -" echomsg "->".a:line." proportion ".l:proportion - let l:proportion = ((l:done * 100)/l:count)/100 - endif - call setline(a:line,substitute(getline(a:line)," [0-9]*%"," ".l:proportion."%","")) - - " - " update checkboxes - " - - " everything under is done, toggle - if l:proportion == 100 -" echomsg "->".a:line." proportion 100." - call setline(a:line,substitute(getline(a:line),"[.","[X","")) - return 100 - endif - - if l:proportion == 0 && l:count == 0 - " done or skipped - if match(getline(a:line),"\[[X-][\],]") != -1 -" echomsg "->".a:line." proportion is X or -." - return 100 - endif - - " not done or questionnable - if match(getline(a:line),"\[[_\?][\],]") != -1 -" echomsg "->".a:line." proportion is _ or ?." - return 0 - endif - - " unknown status for line -" echomsg "->".a:line." proportion is unknown." - return -1 - endif - - " we have not done tasks, undo 'mark as done' - if match(getline(a:line),"\[[X][\],]") != -1 - call setline(a:line,substitute(getline(a:line),"[.","[_","")) - endif -" echomsg "->".a:line." proportion is revert?. [".l:proportion."] / [".l:count."]" - return l:proportion -endf -"}}}1 - -" mappings {{{1 -" gtd addings - " work alone -noremap cb :call InsertSwitch("_") -noremap cq :call InsertSwitch("?") -noremap cD :call InsertSwitch("-") -noremap cx :call InsertSwitch("X"):call NewHMD(FindRootParent(line("."))) -" noremap cx :call InsertSwitch("X") - " team work -noremap cw :call SafeAddTeam("<") -noremap cf :call SafeAddTeam(">") -noremap c= :call SafeAddTeam("=") -" completion -noremap c% :call SafeAddPercent() - -" forced mapping -noremap gb :call InsertElem("[_] ") -noremap gq :call InsertElem("[?] ") -noremap gD :call InsertElem("[-] ") -noremap gx :call InsertElem("[X] ") -noremap gw :call InsertElem("[_,< ] ") -noremap gf :call InsertElem("[_,> ] ") -noremap g= :call InsertElem("[_,= ] ") -noremap g% :call InsertElem("[_] % ") - -" delete a chechbox -noremap cd :call DeleteCheckbox() - -" calculate the proportion of work done on the subtree -noremap cz :call NewHMD(FindRootParent(line("."))) -"}}}1 - -" vim600: set foldlevel=0 foldmethod=marker: diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_math.otl b/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_math.otl deleted file mode 100644 index 54fe307..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_math.otl +++ /dev/null @@ -1,56 +0,0 @@ -VO Math -Syntax - {} contains formalae to compute - {f0;f1} semicolon separates formulae - There is a respective order between the formulae and variables in a heading - {math0;math1;math2} var0=result0 var1=result1 var2=result2 - ordering - Math can come before or after variables - {3+5;3*5} sum=8 product=15 - sum=8 product=15 {3+5;3*5} - name=n name become a named result for passing to a parent - A=n B=n space separates variables - A=n test B=n space separates variables, interspersed words are allowed -Math Examples - Example 1: one-line math {3*5} result=15 - Example 2: one-line floating-point math {3*5.0} result=15.0 - Example 3: Simple math with child variables {A*B+C} result=5.0 - Item 1 A=2 - Item 2 B=2 - Item 3 C=3.0 - Example 4: Automatic summing {bonk} total=6.0 - Item 1 bonk=1 - Item 2 bonk=2 - Item 3 bonk=3.0 - Example 5: Multiple equations {A*B;B*C;C*A;A+B+C} AB=2.0 BC=6.0 CA=3.0 sumABC=6.0 - Item 1 A=1 - Item 2 B=2 - Item 3 C=3.0 - Example 6: Multiple trees {Labor;Materials;Total} Labor=1222.5 Materials=225.0 Total=1447.5 - Project 1 {Labor;Materials;Labor+Materials} Labor=747.5 Materials=110.0 Total=857.5 - Task 1 {Hours*Rate;Materials} Labor=500.0 Materials=100.0 - Hours=10 - Rate=50 - Materials=100 - Task 2 {Hours*Rate;Materials} Labor=247.5 Materials=10.0 - Hours=4.5 - Rate=55 - Materials=10 - Project 2 {Labor;Materials;Labor+Materials} Labor=475.0 Materials=115.0 Total=590.0 - Task 1 {Hours*Rate;Materials} Labor=300.0 Materials=70.0 - Hours=6 - Rate=50 - Materials=70 - Task 2 {Hours*Rate;Materials} Labor=175.0 Materials=45.0 - Hours=3.5 - Rate=50 - Materials=45 - Example 7: Reversal of results and maths AB=2.0 BC=6.0 CA=3.0 sumABC=6.0 {A*B;B*C;C*A;A+B+C} - Item 1 A=1 - Item 2 B=2 - Item 3 C=3.0 - Example 8: Scientific notation: {10000.0*100000} result=1.0e9 - Example 9: Trigonometry: {sin(pi/4)} theta=0.707107 - pi=3.1415926 - Example 10: Base conversion: {printf("0x%x",65)} hex='0x41' - Example 11: Vim internal state: {&ts;&foldlevel} tabstop=4 foldlevel=99999 diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_math.vim b/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_math.vim deleted file mode 100644 index 5c09db1..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_math.vim +++ /dev/null @@ -1,286 +0,0 @@ -"###################################################################### -"# VimOutliner Outline Math -"# Copyright (C) 2014 by Noel Henson noelwhenson@gmail.com -"# The file is currently an experimental part of Vim Outliner. -"# -"# This program is free software; you can redistribute it and/or modify -"# it under the terms of the GNU General Public License as published by -"# the Free Software Foundation; either version 2 of the License, or -"# (at your option) any later version. -"# -"# This program is distributed in the hope that it will be useful, -"# but WITHOUT ANY WARRANTY; without even the implied warranty of -"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -"# GNU General Public License for more details. -"###################################################################### - -" Naming Conventions ################################################## {{{1 -" lnum: line number -" line: string from a line -" vars: dictionary of variables, key:value pairs -" -" Common Functions #################################################### {{{1 -" These functions have broader application scope than those specific to -" performing math on outline trees. Perhaps even adding math to VO tables. -" - -" MyLineage(lnum) {{{2 -" return a list of ancestors in order of youngest-first -" eg: -" 9 A -" 10 B -" 11 C -" 12 D -" MyLineage(12) -" [11,10,9] -function! MyLineage(lnum) - let lineage = [] - let lnum = a:lnum - let indent = Ind(lnum) - if indent == 0 - return lineage - endif - let parentIndent = indent - 1 - while (parentIndent >= 0) && (lnum >= 0) - while (indent > parentIndent) && (lnum >= 0) - let lnum -= 1 - let indent = Ind(lnum) - endwhile - let lineage += [lnum] - let parentIndent -= 1 - endwhile - return lineage -endfunction - -" MyChildren(lnum) {{{2 -" return a list of immediate children from the specificed line -function! MyChildren(lnum) - let children = [] - let parentInd = Ind(a:lnum) - let childInd = parentInd + 1 - let last = line("$") - let lnum = a:lnum + 1 - let lnumInd = Ind(lnum) - while (lnum <= last) && (parentInd < lnumInd) - if lnumInd == childInd - let children += [lnum] - endif - let lnum += 1 - let lnumInd = Ind(lnum) - endwhile - return children -endfunction - -" RootParents() {{{2 -" return a list of all root nodes (indent level 0) -function! RootParents() - let parents = [] - let lnum = 1 - let lines = line("$") - while lnum <= lines - let ind = Ind(lnum) - if ind == 0 - let parents += [lnum] - endif - let lnum += 1 - endwhile - return parents -endfunction - -" FindMath(string) {{{2 -" location of first character of match, -1 if not -" notation: ...{...}...=number... -" function! FindMath(string) -" return match(a:string,'{.*}.*=-\?[0-9]\+\(.[0-9]\+\)\+\([eE][-+]\?[0-9]\+\)\?') -" endfunction -" the below is faster! -" function! FindMath(string) -" return match(a:string,'{.*}.*=-\?[0-9]') -" endfunction -" the below is even faster -" and allows for formulae to be placed at the end of a heading -function! FindMath(string) - if match(a:string,'=') != -1 - return match(a:string,'{.*}') - else - return -1 - endif -endfunction - -" GetMathFromString(string) {{{2 -" returns a list of formulae in a string, in the order they were listed -" returns an empty list if none -" notation: {formula} or {formula1;formula2;...;formulan} -function! GetMathFromString(string) - let mstart = FindMath(a:string) - if mstart == -1 - return [] - endif - let mstart += 1 - let mend = match(a:string,'}',mstart) - if mend == -1 - return [] - endif - let mend -= 1 - return split(a:string[mstart : mend],';') -endfunction - -" MarkValues(string) {{{2 -" mark Values in a string for replacement by formula results -" turns each number into '= voMathResult' -function! MarkValues(string) - return substitute(a:string,'=-\?[0-9]\+\(.[0-9]\+\)\?\([eE][-+]\?[0-9]\+\)\?','=voMathResult','g') -endfunction - -" GetVarsFromString(string,vars) {{{2 -" add key:value pairs from a string to the passed dictionary -" create new entries if key does not exist -" add values to existing entries -" vars is a dictionary of key:value pairs -" notation: name=number -function! GetVarsFromString(string,vars) - " quick return if no potential variables - if match(a:string,'=') == -1 - return - endif - let tokens = split(a:string) - for token in tokens - if match(token,'=') == -1 - continue - endif - let [key,value] = split(token,"=") - " read values are cast to floats to prevent - " auto-casting to integers in the first case - " and strings in the second - if has_key(a:vars,key) - let a:vars[key] += str2float(value) - else - let a:vars[key] = str2float(value) - endif - endfor -endfunction - -" ReplaceVars(formula,vars) {{{2 -" replace variables with their values from the supplied dictionary -" vars is a dictionary of key:value pairs -" key:value pairs are first sorted by key length, longest-first -" this prevents name collisions when similar key names are used like: -" Total and Totals -or- X1 and X12 -function! ReplaceVars(formula,vars) - let formula = a:formula - let vars = [] - for [key,val] in items(a:vars) - let vars += [[len(key),key,val]] - endfor - let vars = reverse(sort(vars)) - for [len,key,val] in vars - let formula = substitute(formula,key,string(val),"g") - endfor - return formula -endfunction - -" ComputeString(string,vars) {{{2 -" compute a string using its math and a dictionary of variables -" return the computed, modified string -" string is a string containing math and result variable names -" vars is a dictionary of key:value pairs used in the computation -function! ComputeString(string,vars) - let string = a:string - let maths = GetMathFromString(string) - if len(maths) - let string = MarkValues(string) - for math in maths - let math = ReplaceVars(math,a:vars) - let result = string(eval(math)) - let string = substitute(string,'voMathResult',result,"") - endfor - endif - return string -endfunction - -" Math Functions on Outlines ########################################## {{{1 - -" MyChildrensVars(lnum) {{{2 -" return a dictionary of variable from immediate children -function! MyChildrensVars(lnum) - let children = MyChildren(a:lnum) - let vars = {} - for child in children - call GetVarsFromString(getline(child),vars) - endfor - return vars -endfunction - -" ComputeLine(lnum) {{{2 -" compute a line's maths using variables from it's children -" replace the line with the newly computed line -function! ComputeLine(lnum) - let vars = MyChildrensVars(a:lnum) - let line = ComputeString(getline(a:lnum),vars) - call setline(a:lnum,line) -endfunction - -" ComputeUp(lnum) {{{2 -" compute 'up' a tree towards level 1 -" the line (lnum) itself is computed first -" this is intended to be a fast compute method to update a branch of nodes -" it assumes that all other calculations in a tree are correct -function! ComputeUp(lnum) - call ComputeLine(a:lnum) - let lineage = MyLineage(a:lnum) - if len(lineage) - for lnum in lineage - call ComputeLine(lnum) - endfor - endif -endfunction - -" ComputeDown(lnum) {{{2 -" compute 'down' a tree from the current node -" the line (lnum) itself is computed last -function! ComputeDown(lnum) - let children = MyChildren(a:lnum) - if len(children) - for lnum in children - call ComputeDown(lnum) - endfor - endif - call ComputeLine(a:lnum) -endfunction - -" ComputeTree(lnum) {{{2 -" compute down an entire tree -function! ComputeTree(lnum) - let parents = MyLineage(a:lnum) - if len(parents) - let topparent = parents[-1] - else - let topparent = a:lnum - endif - call ComputeDown(topparent) -endfunction - -" ComputeDocument() {{{2 -" compute down all trees - -function! ComputeDocument(lnum) - let parents = RootParents() - for parent in parents - call ComputeDown(parent) - endfor -endfunction - -" Concealings {{{1 -" BadWord is a very old VO region that is no longer used. -" It can be used now for plugins :) -" This should probably be fixed at some point in the future -syntax match BadWord "{.\+}" conceal transparent cchar=µ -set conceallevel=1 - -" mappings {{{1 - -map == :call ComputeUp(line(".")) -map =t :call ComputeTree(line(".")) -map =d :call ComputeDocument() -map =h :set conceallevel=1 -map =H :set conceallevel=0 diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_newhoist.vim b/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_newhoist.vim deleted file mode 100644 index e2ecd64..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_newhoist.vim +++ /dev/null @@ -1,456 +0,0 @@ -"###################################################################### -"# VimOutliner Hoisting -"# Copyright (C) 2003 by Noel Henson noel@noels-lab.com -"# The file is currently an experimental part of Vim Outliner. -"# -"# This program is free software; you can redistribute it and/or modify -"# it under the terms of the GNU General Public License as published by -"# the Free Software Foundation; either version 2 of the License, or -"# (at your option) any later version. -"# -"# This program is distributed in the hope that it will be useful, -"# but WITHOUT ANY WARRANTY; without even the implied warranty of -"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -"# GNU General Public License for more details. -"###################################################################### - -" Load the plugin {{{1 -if exists("g:did_vo_hoist") - "finish -endif -if !exists("g:hoistParanoia") - let g:hoistParanoia=0 -endif -if !exists('hlevel') - let hlevel = 20 -endif -let g:did_vo_hoist = 1 -" mappings {{{1 -map hh :call Hoist(line(".")) -map hd :call DeHoist() -map hD :call DeHoistAll() -"}}}1 -" syntax {{{1 -" Hoisted {{{2 -"syntax match Invis +^\~\zs.*$+ containedin=ALL conceal cchar=~ -""hi Invis guifg=bg ctermfg=bg -""hi Invis guifg=bg -"hi link Invis Conceal -"}}}2 -"}}}1 -" MyFoldText() {{{1 -" Create string used for folded text blocks -function! MyFoldText() - let l:MySpaces = MakeSpaces(&sw) - let l:line = getline(v:foldstart) - let l:bodyTextFlag=0 - if l:line =~'^\~' - let l:line = '~'.repeat(' ', winwidth(0)-1) - elseif l:line =~ "^\t* \\S" || l:line =~ "^\t*\:" - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[TEXT]" - elseif l:line =~ "^\t*\;" - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[TEXT BLOCK]" - elseif l:line =~ "^\t*\> " - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[USER]" - elseif l:line =~ "^\t*\>" - let l:ls = stridx(l:line,">") - let l:le = stridx(l:line," ") - if l:le == -1 - let l:l = strpart(l:line, l:ls+1) - else - let l:l = strpart(l:line, l:ls+1, l:le-l:ls-1) - endif - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[USER ".l:l."]" - elseif l:line =~ "^\t*\< " - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[USER BLOCK]" - elseif l:line =~ "^\t*\<" - let l:ls = stridx(l:line,"<") - let l:le = stridx(l:line," ") - if l:le == -1 - let l:l = strpart(l:line, l:ls+1) - else - let l:l = strpart(l:line, l:ls+1, l:le-l:ls-1) - endif - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[USER BLOCK ".l:l."]" - elseif l:line =~ "^\t*\|" - let l:bodyTextFlag=1 - let l:MySpaces = MakeSpaces(&sw * (v:foldlevel-1)) - let l:line = l:MySpaces."[TABLE]" - endif - let l:sub = substitute(l:line,'\t',l:MySpaces,'g') - let l:len = strlen(l:sub) - let l:sub = l:sub . " " . MakeDashes(58 - l:len) - let frange = (v:foldend + l:bodyTextFlag)- v:foldstart - let l:sub = l:sub . " (" . frange - if frange == 1 - let l:sub = l:sub . " line)" - else - let l:sub = l:sub . " lines)" - endif - return l:sub.repeat(' ', winwidth(0)-len(l:sub)) -endfunction -"}}}1 -" New Fold Function (will be put into vo_base later {{{1 -function! MyHoistableFoldLevel(line) - let l:myindent = Ind(a:line) - let l:nextindent = Ind(a:line+1) - - if HoistFold(a:line) - " if (a:line == 1) - " return g:hlevel - " elseif (HoistFold(a:line-1) == 0) - " return ">".0 - " else - " return g:hlevel - " endif - return g:hlevel - - elseif BodyText(a:line) - if (BodyText(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (BodyText(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif PreformattedBodyText(a:line) - if (PreformattedBodyText(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (PreformattedBodyText(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif PreformattedTable(a:line) - if (PreformattedTable(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (PreformattedTable(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif PreformattedUserText(a:line) - if (PreformattedUserText(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (PreformattedUserTextSpace(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif PreformattedUserTextLabeled(a:line) - if (PreformattedUserTextLabeled(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (PreformattedUserText(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif UserText(a:line) - if (UserText(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (UserTextSpace(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - elseif UserTextLabeled(a:line) - if (UserTextLabeled(a:line-1) == 0) - return '>'.(l:myindent+1) - endif - if (UserText(a:line+1) == 0) - return '<'.(l:myindent+1) - endif - return (l:myindent+1) - else - if l:myindent < l:nextindent - return '>'.(l:myindent+1) - endif - if l:myindent > l:nextindent - return (l:myindent) - endif - return l:myindent - endif -endfunction -set foldexpr=MyHoistableFoldLevel(v:lnum) -"}}}2 -"}}}1 -" Functions {{{1 -" RemoveTabs(line,tabs) {{{2 -" remove specified number of tabs from the begining of line -function! RemoveTabs(start,end,tabs) - if a:tabs > 0 - let l:doit = "silent ".a:start.",".a:end."s/^\\(\\t\\)\\{".a:tabs."}/" - exe l:doit - endif -endfunction -"}}}2 -" IsParent(line) {{{2 -" Return 1 if this line is a parent -function! IsParent(line) - return (Ind(a:line)+1) == Ind(a:line+1) -endfunction -"}}}2 -" FindParent(line) {{{2 -" Return line if parent, parent line if not -function! FindParent(line) - if IsParent(a:line) - return a:line - else - let l:parentindent = Ind(a:line)-1 - let l:searchline = a:line - while (Ind(l:searchline) != l:parentindent) && (l:searchline > 0) - let l:searchline = l:searchline-1 - endwhile - return l:searchline - endif -endfunction -"}}}2 -" HoistFold() {{{2 -" Return a flag indicating that there is a valid hoist -function! HoistFold(line) - if getline(a:line) =~ '^\~' - return 1 - else - return 0 - endif -endfunction -"}}}2 -" Hoisted() {{{2 -" Return a flag indicating that there is a valid hoist -function! Hoisted() - if getline(1) =~ '^\~' - return 1 - else - return 0 - endif -endfunction -"}}}2 -" FindTopHoist(line) {{{2 -" Return line number of the nearest (last line) top hoist tag -function! FindTopHoist(line) - let l:line = a:line - while (match(getline(l:line),"^\\~") == -1) && (l:line > 0) - let l:line -= 1 - endwhile - return l:line -endfunction -"}}}2 -" FindBottomHoist(line) {{{2 -" Return line number of the nearest (last line) top hoist tag -function! FindBottomHoist(line) - let l:line = a:line - let l:lastline = line('$') - while getline(l:line) !~ "^\\~" && (l:line > 0) && l:line <= l:lastline - let l:line += 1 - endwhile - return l:line -endfunction -"}}}2 -" FindLastChild(line) {{{2 -" Return the line number of the last decendent of parent line -function! FindLastChild(line) - let l:parentindent = Ind(a:line) - let l:searchline = a:line+1 - while Ind(l:searchline) > l:parentindent - let l:searchline = l:searchline+1 - endwhile - return l:searchline-1 -endfunction -"}}}2 -" GetHoistedIndent(line) {{{2 -" line is the line number containing the indent -" Returns the original indent of the hoisted region -function! GetHoistedIndent(line) - return str2nr(strpart(getline(a:line),1,2)) -endfunction -"}}}2 -" HoistTagBefore(line,indent) {{{2 -function! HoistTagBefore(line,indent) - let l:doit = "silent 1,".(a:line-1)."s/^/\\~".a:indent." /" - exe l:doit - "call setline(1, map(getline(1,a:line-1), '"~".a:indent.v:val')) -endfunction -"}}}2 -" HoistDeTagBefore(line) {{{2 -function! HoistDeTagBefore(line) - let l:doit = "silent 1,".a:line."s/^\\~\\d* //" - exe l:doit -endfunction -"}}}2 -" HoistTagAfter(line) {{{2 -function! HoistTagAfter(line) - if a:line > line('$') - return - endif - let l:doit = "silent ".a:line.",$s/^/\\~/" - exe l:doit -endfunction -"}}}2 -" HoistDeTagAfter(line) {{{2 -function! HoistDeTagAfter(line) - if a:line > line('$') - return - endif - let l:doit = "silent ".a:line.",$s/^\\~//" - exe l:doit -endfunction -"}}}2 -" HoistWrite(file) {{{2 -" Write the clean file if hoisted -function! HoistWrite(file,...) range - "let lines = getline(1,line('$')) - let saved = 0 - mkview - call DeHoistAll() - if v:cmdbang - let bang = '!' - else - let bang = '' - endif - try - if a:0 - echom a:firstline.','.a:lastline."w".bang.fnameescape(v:cmdarg).' '.a:file - exe a:firstline.','.a:lastline."w".bang.fnameescape(v:cmdarg).' '.a:file - else - exe "w".bang.fnameescape(v:cmdarg).' '.a:file - endif - let saved = 1 - catch - echohl ErrorMsg - echom substitute(v:exception,'^Vim(.\{-}):','','') - echohl None - endtry - "call setline(1,lines) - silent earlier - silent loadview - if saved - silent setlocal nomodified - endif -endfunction "HoistWrite -" Hoist(line) {{{2 -" Write the offspring of a parent to a new file, open it and remove the -" leading tabs. -function! Hoist(line) - let l:parent = FindParent(a:line) - if l:parent == 0 - return - endif - "call cursor(l:parent,1) - "let l:firstline = l:parent+1 - let l:firstline = l:parent - let l:childindent = Ind(l:firstline) - let l:lastline = FindLastChild(l:parent) - setlocal foldlevel=20 - call HoistTagBefore(l:firstline,l:childindent) - call HoistTagAfter(l:lastline+1) -" call RemoveTabs(l:firstline,l:lastline,l:childindent) - call cursor(l:firstline,1) - setlocal foldlevel=19 - augroup VO_HOIST - au! - au CursorMoved,CursorMovedI - \ if getline('.') =~ '^\~\d* ' | - \ call HoistKeepCursor(1) | - \ elseif getline('.') =~ '^\~' | - \ call HoistKeepCursor(0) | - \ endif - "au BufWriteCmd call HoistWrite(fnameescape(expand(""))) - "au FileWriteCmd '[,']call HoistWrite(fnameescape(expand("")), 1) - augroup END - if exists('+conceallevel') - syntax match Invis +^\~.*$+ conceal cchar=~ - hi link Invis Conceal - setlocal conceallevel=2 - else - syntax match Invis +^\~.*$+ containedin=ALL - let i = 1 - while synIDtrans(i) != 0 - if synIDattr(i, 'name') == 'Normal' - if synIDattr(i, 'bg') >= 0 - " bg is set - hi Invis guifg=bg ctermfg=bg - else - hi Invis guifg=NONE ctermfg=NONE - endif - break - endif - let i += 1 - endwhile - endif -endfunction -" }}}2 -" HoistKeepCursor(top) {{{2 -" Keep cursor out of non-hoisted area. -function! HoistKeepCursor( top ) - if a:top - while getline('.') =~ '^\~\d* ' - normal! j - endwhile - else - while getline('.') =~ '^\~' - normal! k - endwhile - endif -endfunction "HoistKeepCursor }}}2 -" MakeTabs(n) {{{2 -" return a string of n tabs -function! MakeTabs(n) - let l:tabs = "" - let l:n = a:n - while l:n > 0 - let l:tabs = l:tabs."\t" - let l:n -= 1 - endwhile - return l:tabs -endfunction -"}}}2 -"}}}2 -" DeHoist() {{{2 -" Write the offspring of a parent to a new file, open it and remove the -" leading tabs. -function! DeHoist() - if !Hoisted() - return - endif - let l:line = line(".") - let l:top = FindTopHoist(l:line) - let l:bottom = FindBottomHoist(l:line) - echom 1 - let l:indent = GetHoistedIndent(l:top) -" let l:tabs = MakeTabs(l:indent) -" let l:doit = "silent ".(l:top+1).",".(l:bottom-1)."s/^/".l:tabs."/" -" exe l:doit - call HoistDeTagBefore(l:top) - call HoistDeTagAfter(l:bottom) - if !Hoisted() - augroup VO_HOIST - au! - augroup! VO_HOIST - augroup END - endif - call cursor(l:line,l:indent) -endfunction -"}}}2 -" DeHoistAll() {{{2 -" Write the offspring of a parent to a new file, open it and remove the -" leading tabs. -function! DeHoistAll() - while Hoisted() - call DeHoist() - endwhile -endfunction -"}}}2 -"}}}1 -" vim600: set foldlevel=0 foldmethod=marker: diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_smart_paste.vim b/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_smart_paste.vim deleted file mode 100644 index 6aa0c45..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_smart_paste.vim +++ /dev/null @@ -1,117 +0,0 @@ -" Here is a small script that remaps the p and P normal commands such that VO -" will do what one would expect when pasting cut/copied nodes into another -" section of an outline. It will adjust the indents and not paste into the -" middle of a branch. -" Added 2011-03-01(JB): This script will now also copy an outline correctly by -" using \\y, copy to the register with \\r, cut an outline by using \\d, and -" paste from the register using \\b. -" http://www.lists.vimoutliner.org/pipermail/vimoutliner/2008-October/002366.html - -map p :call VOput() -map \\b :call VOputreg() -map \\y :call VOcop() -map \\r :call VOreg() -map \\d :call VOcut() -map P ]P - -if exists('s:loaded') - finish -endif -let s:loaded = 1 - -function! IsParent(line) - if a:line == line("$") - return 0 - elseif Ind(a:line) < Ind(a:line+1) - return 1 - else - return 0 - endif -endfunction - - -function! VOcop() - let thisLine = line(".") - if (foldclosed(thisLine) == -1) && IsParent(thisLine) - normal! zc - let fold_cursor = getpos(".") - normal! yy - let get_cursor = getpos(".") - call setpos('.',fold_cursor) - normal! zo - call setpos('.',get_cursor) - else - normal! yy - endif -endfunction - -function! VOreg() - let thisLine = line(".") - if (foldclosed(thisLine) == -1) && IsParent(thisLine) - normal! zc - let fold_cursor = getpos(".") - normal! V"+y - let get_cursor = getpos(".") - call setpos('.',fold_cursor) - normal! zo - call setpos('.',get_cursor) - else - normal! V"+y - endif -endfunction - -function! VOcut() - let thisLine = line(".") - if (foldclosed(thisLine) == -1) && IsParent(thisLine) - normal! zc - let fold_cursor = getpos(".") - normal! dd - let get_cursor = getpos(".") - call setpos('.',fold_cursor) - normal! zo - call setpos('.',get_cursor) - else - normal! dd - endif -endfunction - -function! VOput() - let thisLine = line(".") - if (foldclosed(thisLine) == -1) && IsParent(thisLine) - normal! zc - let fold_cursor = getpos(".") - normal! ]p - let put_cursor = getpos(".") - call setpos('.',fold_cursor) - normal! zo - call setpos('.',put_cursor) - else - normal! ]p - endif -endfunction - - -function! VOputreg() - let thisLine = line(".") - if (foldclosed(thisLine) == -1) && IsParent(thisLine) - normal! zc - let fold_cursor = getpos(".") - normal! "+]p - let put_cursor = getpos(".") - call setpos('.',fold_cursor) - normal! zo - call setpos('.',put_cursor) - else - normal! "+]p - endif -endfunction - - - - - - - - - - diff --git a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_tags.vim b/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_tags.vim deleted file mode 100644 index c5bebde..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/plugin/votl_tags.vim +++ /dev/null @@ -1,246 +0,0 @@ -" File: plugin/votl_tags.vim -" Version: 1.0 -" Modified: 2011-02-28 -" Description: This plugin provides inter-outline links for vimoutliner. -" Maintainer: Israel Chauca F. -" Manual: The following mappings are added: -" - : Follow a link. -" - : Jump back in the link-history. -" - l : Create a link. -" ============================================================================ - -if v:version < 700 - echom 'VimOutliner: votl_tags.vim requires Vim 7.0 or later.' - finish -endif - -" Create outlines' jump-list. -if !exists('w:vo_jump_list') - let w:vo_jump_list = [] -endif - -" Mappings {{{1 - -" Follow inter-outline link. -noremap VO_FollowLink :call follow_link() -if !hasmapto('VO_FollowLink') - "map VO_FollowLink - map VO_FollowLink -endif - -" Go back to previous outline. -noremap VO_JumpBack :call jump_back() -if !hasmapto('VO_JumpBack') - "map VO_JumpBack - map VO_JumpBack -endif - -" Create a link from a word in normal mode. -noremap VO_CreateLink :call create_link() -if !hasmapto('VO_CreateLink') - silent! map l VO_CreateLink -endif - -" Create a link from a word in insert mode. -inoremap VO_CreateLinkI :call create_link() -if !hasmapto('VO_CreateLinkI') - silent! imap l VO_CreateLinkI -endif - -" Functions {{{1 - -let s:checkboxpat = '\%(\[[^[\]]\+\]\s\+\%(\d*%\d*\s\+\)\?\)\?' - -" Don't re-load functions. -if exists('s:loaded') - finish -endif -let s:loaded = 1 - -" s:get_link() {{{2 -" Get link data. -function! s:get_link(linenr) - " Check if it's a valid link. - let line = getline(a:linenr) - if line =~? '\m^\t*'.s:checkboxpat.'_tag_\w\+\s*$' - " Don't remember where this bit came from, please let me know if you do. - let [_,file,row,col;m0] = matchlist(getline(a:linenr + 1), '\m^\t*'.s:checkboxpat.'\([^:]\+\)\%(:\(\d\+\)\)\?\%(:\(\d\+\)\)\?$') - elseif line =~? '\m^\t*'.s:checkboxpat.'_ilink_\(.\{-}:\s\)\?\s*\S.*$' - let pat = '\m^\t*'.s:checkboxpat.'_ilink_\%([^:\\/]\{-}:\s\)\?\s*\(.\+\)\%(:\(\d\+\)\)\?\%(:\(\d\+\)\)\?$' - let [_,file,row,col;m0] = matchlist(line, pat) - else - return ['',0,0,0] - endif - let is_inner_link = 0 - if file == '%' - let file = expand('%:p') - let is_inner_link = 1 - endif - let row = (row == '' ? 0 : row * 1) - let col = (col == '' ? 0 : col * 1) - - return [file, row, col, is_inner_link] -endfunction - -" s:follow_link() {{{2 -" Follow an interoutline link. -function! s:follow_link() - " Get link data. - let [file, row, col, is_inner_link] = s:get_link(line('.')) - if file == '' - echom 'Vimoutliner: "'.substitute(getline('.'), '\m^\t*'.s:checkboxpat, '', '').'" doesn''t not look like an inter-outline link.' - return - endif - - " Check if file path exists. - let file = s:get_absolute_path(expand('%:h'), file) - let file = fnamemodify(file,':p') - let baseDir = fnamemodify(file,':h') - let dirconfirm = 0 - " Check if directories exists. {{{3 - if glob(baseDir) == '' - if exists('*confirm') - let dirconfirm = confirm('The linked file "'.file.'" and one or more directories do not exist, do you want to create them now?', "&Yes\n&No", '2', 'Question') - else - " Can't ask, asume a yes for answer. - let dirconfirm = 1 - endif - if dirconfirm == 1 - " Create dir(s): - if exists('*mkdir') - call mkdir(baseDir,'p') - elseif executable('mkdir') - call system('`which mkdir` -p '.shellescape(baseDir)) - else - echom 'Vimoutliner: Vim can not create the required directories, please create them yourself.' - return - endif - else - return - endif - endif - " Check if file exists. {{{3 - if glob(file) == '' - if exists('*confirm') && dirconfirm == 0 - let confirm = confirm('The linked file "'.file.'" does not exist, do you want to create it now?', "&Yes\n&No", '2', 'Question') - else - " Can't ask, asume a yes for answer. - let confirm = 1 - endif - if confirm == 1 - call writefile([], file) - else - return - endif - endif - " }}}3 - " Now let's jump to that outline. - try - call s:update_jump_list() - if !is_inner_link - exec "buffer ".bufnr(substitute(file, '\m^'.getcwd().'/','',''), 1) - endif - if row > 0 - call setpos('.',[0,row,col,0]) - endif - setlocal buflisted - catch - " Prevent reporting that the error ocurred inside this function. - echoh ErrorMsg - echom substitute(v:exception,'\m^Vim(.\{-}):','','') - echoh None - endtry - return '' -endfunction -" s:get_absolute_path(baseDir, fileName) {{{2 -" Guess an absolute path -function! s:get_absolute_path(baseDir, fileName) - let baseDir = a:baseDir - if baseDir !~ '/$' - let baseDir = baseDir . '/' - endif - if a:fileName =~ '^/' - let absFileName = a:fileName - else - let absFileName = baseDir . a:fileName - endif - - let absFileName = substitute(absFileName, '\m/\./', '/', 'g') - while absFileName =~ '/\.\./' - absFileName = substitute(absFileName, '\m/[^/]*\.\./', '', '') - endwhile - return absFileName -endfunction -" s:update_jump_list() {{{2 -" Add current outline to list. -function! s:update_jump_list() - call add(w:vo_jump_list, [bufnr('%')] + getpos('.')) -endfunction -" s:remove_buf(buf) {{{2 -" Remove outline from list. -function! s:remove_buf() - if !exists('w:vo_jump_list') || len(w:vo_jump_list) == 0 - return - endif - " Remove last outline. - call remove(w:vo_jump_list, -1) -endfunction -" s:jump_back() {{{2 -" Jump back to the previous outline. -function! s:jump_back() - if len(w:vo_jump_list) == 0 - echom 'This is the first outline.' - return - endif - exec "buffer ".w:vo_jump_list[-1][0] - call setpos('.', w:vo_jump_list[-1][1 : ]) - call s:remove_buf() -endfunction -" s:create_link() {{{2 -" Create an interoutline link with the current keyword under the cursor. -function! s:create_link() - let line = getline('.') - " Create link on a header only - if line =~ '\m^\t\+[^ :;<>|]' - echom 'Vimoutliner: Links have to be on a header.' - return - endif - " Check if the there's is some content in the current line and a current - " link doesn't exists. - if line =~# '\m^\t*'.s:checkboxpat.'_ilink_\%([^:]\{-}:\s\)\?\s*\S\+.*$' - echom 'Vimoutliner: Looks like "'.substitute(line,'^\t*'.s:checkboxpat.'\(\S.*$\)','\1','').'" is already a link.' - return - endif - call inputsave() - let path = input('Linked outline''s path: ', '', 'file') - call inputrestore() - if path == '' - " User canceled. - return '' - endif - let path = matchstr(path, '\m^\t*'.s:checkboxpat.'\zs\S.\{-}\ze\s*$') - "if path !~ '\.otl$' - "" Add extension. - "let path = path.'.otl' - "endif - let tag = '_ilink_' - let [_,indent,checkbox,label;m0] = matchlist(line, '\m^\(\t*\)\('.s:checkboxpat.'\)\%(_ilink_\)\?\s*\(\S\%(.\{-1,}\S\)\?\)\?\s*\%(:\s\)\?\s*$') - "echom indent.'-'.checkbox.'-'.label - if indent == '' - let indent = matchstr(getline(line('.')-1), '\m^\(\t*\)') - endif - if label !~ ':\s*$' - let label = substitute(label, '\m\s*$', ': ', '') - else - let label = substitute(label, '\m:\s*$', ': ', '') - endif - - call setline(line('.'), indent.checkbox.tag.' '.label.path) - echo '' -endfunction -" Autocommands {{{1 -augroup vo_links - au! - au BufWinEnter * if !exists('w:vo_jump_list') | let w:vo_jump_list = [] | endif -augroup END -"{{{1 vim:foldmethod=marker diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/MediaWiki2otl b/pack/acp/start/vimoutliner/vimoutliner/scripts/MediaWiki2otl deleted file mode 100644 index f8f5f1a..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/MediaWiki2otl +++ /dev/null @@ -1,17 +0,0 @@ -"delete trailing white space -:%s/^[ \t][ \t]*\(.*\)$/\1/ -"delete one line from each block of empty lines -:g/^\_$\n\_^..*$/d -"add leading : to body text -:%s/^[^=]..*[^=]$/:&/ -"add leading : to dividers made entirely of equal signs -:%s/^==*$/:&/ -"delete one leading = and space from heading -"delete trailing space and = from heading -"\1 is leading equal signs. \2 is heading. -:%s/^=\(=*\) \(.*\) =\+$/\1\2/ -"indent body text lines (lines starting with ":") -"how to indent body text lines? -"indent headings -"substitute each = with tab -:g/^=/s/=/\t/g diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/MediaWiki2otl.desc b/pack/acp/start/vimoutliner/vimoutliner/scripts/MediaWiki2otl.desc deleted file mode 100644 index 6f8a7f6..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/MediaWiki2otl.desc +++ /dev/null @@ -1,37 +0,0 @@ -This email has the attachment. - -Hello Vim Outliners, - -I want to migrate some word processor documents to otl.  If you know of a formatter to convert "MediaWiki to otl" or "odt to otl" or "doc to otl" please let me know.  I did not find one. - -I am attempting to write ex script to convert MediaWiki to otl.  This would be useful because LibreOffice Writer can export to MediaWiki format, and then the script would convert it to otl. - -The heading format in MediaWiki is simple; one equal sign for each level in the heading hierarchy e.g.: - -= head1 = -body text -== head2 == -body text -=== head3 === -body text - -The above MediaWiki text should convert to otl like this: - -head1 -:body text -head2 -:body text -head3 -:body text - -The attached MediaWiki2otl script converts MediaWiki to otl except for one thing.  I can not figure out how to indent the body text lines (indent lines that start with “:â€). Here is the pseudo code: - -if current line has “=†-set count to number of “=†-else   -insert count “\t†- -Can this be done in ex script? i.e. Is there an ex command that can set a variable (or register) and an ex command to read that variable in the following lines? - -Thank you, -wolfv diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING deleted file mode 100644 index 0e7003c..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING +++ /dev/null @@ -1,118 +0,0 @@ -The Litt Perl Development Tools License -Version 1.0, 3/14/2003 ---------------------------------------- - -The Litt Perl Development Tools License (LPDTL) -consists of the GNU GPL plus an exception, plus an -exception to that exception. - -This program is free software; you can -redistribute it and/or modify it under the terms -of version 2 of the GNU General Public License as -published by the Free Software Foundation. - -This program is distributed in the hope that it -will be useful, but WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General -Public License along with this software; see the -file COPYING.GPL. If not, write to the Free -Software Foundation, Inc., 59 Temple Place, Suite -330, Boston, MA 02111-1307 USA. Other locations -for the GNU General Public License include: - - http://www.troubleshooters.com/licenses/LPDTL/COPYING.GPL - -and - - http://www.gnu.org/licenses/gpl.txt - - -THE EXCEPTION - -As a special exception, the author of this Perl -Development Tool gives permission for additional -uses of the text contained in this Perl -Development Tool. - -The exception is that, if you reference the LPDTL -licensed software, by use of a Perl "use" or -"require" statement, from other files, this does -not by itself cause the files referencing this -Perl Development Tool to be covered by the GNU -General Public License. Your use of the -referencing files is in no way restricted on -account of their referencing the code in this Perl -Development Tool. - -Likewise, if you link the LPDTL licensed software -with other files to produce an executable, this -does not by itself cause the resulting executable -to be covered by the GNU General Public License. -Your use of that executable is in no way -restricted on account of linking the LPDTL -licensed software's code into it. - - -EXCEPTION LIMITATIONS - -This exception does not however invalidate any -other reasons why the referencing files, or any -produced executables, might be covered by the GNU -General Public License. - -This exception applies only to the code released -by its author under the Litt Perl Development -Tools License. Such code must clearly state that -it's covered by the Litt Perl Development Tools -License. If you copy code from other GNU-GPL -compatible software, as the General Public License -permits, the exception does not apply to the code -that you add in this way. To avoid misleading -anyone as to the status of such modified files, -you must delete this exception notice from them. - -If you write modifications of your own for -software licensed under the Litt Perl Development -Tools License, it is your choice whether to permit -this exception to apply to your modifications. If -you do not wish that, delete this exception -notice. - -This exception cannot be applied to software whose -license, End User License Agreement, or Terms Of -Use limit reverse engineering or discussion about -the software. This exception cannot be applied to -software incorporating any type of software -patents. - - -THE EXCEPTION TO THE EXCEPTION - -The intent of the Litt Perl Development Tools -License (LPDTL) is to produce a free software -development environment enabling a software -developer to create free software, nonfree -software, or proprietary software. Therefore, all -of the resulting program's software development -features must be contained in the LPDTL licensed -software, or in GPL licensed software. It is a -violation of the LPDTL to place any software -development features in any file not licensed -under either the GPL or the LPDTL. - -A "software development feature" is a feature -enabling creation or modification of software. - - -DISCUSSION OF INTENT OF THIS LICENSE - -You can find a discussion of the intent of this -license in the LPDTL_discuss.txt file. If you -haven't been given a copy of this file, you can -find it in the -http://www.troubleshooters.com/licenses/LPDTL/ -directory. diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING.GPL b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING.GPL deleted file mode 100644 index 5b6e7c6..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING.GPL +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING.LPDTL.1.0 b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING.LPDTL.1.0 deleted file mode 100644 index 0e7003c..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/COPYING.LPDTL.1.0 +++ /dev/null @@ -1,118 +0,0 @@ -The Litt Perl Development Tools License -Version 1.0, 3/14/2003 ---------------------------------------- - -The Litt Perl Development Tools License (LPDTL) -consists of the GNU GPL plus an exception, plus an -exception to that exception. - -This program is free software; you can -redistribute it and/or modify it under the terms -of version 2 of the GNU General Public License as -published by the Free Software Foundation. - -This program is distributed in the hope that it -will be useful, but WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General -Public License along with this software; see the -file COPYING.GPL. If not, write to the Free -Software Foundation, Inc., 59 Temple Place, Suite -330, Boston, MA 02111-1307 USA. Other locations -for the GNU General Public License include: - - http://www.troubleshooters.com/licenses/LPDTL/COPYING.GPL - -and - - http://www.gnu.org/licenses/gpl.txt - - -THE EXCEPTION - -As a special exception, the author of this Perl -Development Tool gives permission for additional -uses of the text contained in this Perl -Development Tool. - -The exception is that, if you reference the LPDTL -licensed software, by use of a Perl "use" or -"require" statement, from other files, this does -not by itself cause the files referencing this -Perl Development Tool to be covered by the GNU -General Public License. Your use of the -referencing files is in no way restricted on -account of their referencing the code in this Perl -Development Tool. - -Likewise, if you link the LPDTL licensed software -with other files to produce an executable, this -does not by itself cause the resulting executable -to be covered by the GNU General Public License. -Your use of that executable is in no way -restricted on account of linking the LPDTL -licensed software's code into it. - - -EXCEPTION LIMITATIONS - -This exception does not however invalidate any -other reasons why the referencing files, or any -produced executables, might be covered by the GNU -General Public License. - -This exception applies only to the code released -by its author under the Litt Perl Development -Tools License. Such code must clearly state that -it's covered by the Litt Perl Development Tools -License. If you copy code from other GNU-GPL -compatible software, as the General Public License -permits, the exception does not apply to the code -that you add in this way. To avoid misleading -anyone as to the status of such modified files, -you must delete this exception notice from them. - -If you write modifications of your own for -software licensed under the Litt Perl Development -Tools License, it is your choice whether to permit -this exception to apply to your modifications. If -you do not wish that, delete this exception -notice. - -This exception cannot be applied to software whose -license, End User License Agreement, or Terms Of -Use limit reverse engineering or discussion about -the software. This exception cannot be applied to -software incorporating any type of software -patents. - - -THE EXCEPTION TO THE EXCEPTION - -The intent of the Litt Perl Development Tools -License (LPDTL) is to produce a free software -development environment enabling a software -developer to create free software, nonfree -software, or proprietary software. Therefore, all -of the resulting program's software development -features must be contained in the LPDTL licensed -software, or in GPL licensed software. It is a -violation of the LPDTL to place any software -development features in any file not licensed -under either the GPL or the LPDTL. - -A "software development feature" is a feature -enabling creation or modification of software. - - -DISCUSSION OF INTENT OF THIS LICENSE - -You can find a discussion of the intent of this -license in the LPDTL_discuss.txt file. If you -haven't been given a copy of this file, you can -find it in the -http://www.troubleshooters.com/licenses/LPDTL/ -directory. diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/INSTALL b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/INSTALL deleted file mode 100644 index 03615a8..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/INSTALL +++ /dev/null @@ -1,23 +0,0 @@ -INSTALLATION PROCEDURES FOR Node.pm - Version 0.2.0 released 5/13/2004 - -Downloading - Download from - http://www.troubleshooters.com/projects/Node/Node.#.#.#.tgz -Installing - The tarball extracts into a directory called Node - cd to the directory into which you want to place Node - Move any existing Node directory out of the way - tar xzvf Node.#.#.#.tgz -Testing - cd into the Node directory - ./hello.pl - troubleshoot as necessary -Using - In any perl program using Node not in the Node directory... - Use following code at beginning - #!/usr/bin/perl -w -I/path/to/Node - use strict; - use Node; - If destination machine has unknown Node.pm directory... - See example_nodepath.pl diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/LPDTL_discuss.txt b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/LPDTL_discuss.txt deleted file mode 100644 index 9ee1b08..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/LPDTL_discuss.txt +++ /dev/null @@ -1,26 +0,0 @@ -INTENT OF THE LITT PERL DEVELOPMENT TOOL LICENSE - -The intent of the Litt Perl Development Tool License (LPDTL) is to provide -programmers with a development tool that is copylefted free software without -requiring applications built from this tool to be free software. - -I (Steve Litt) have tried to craft the LPDTL to prevent "cute and -innovative" ways of taking this tool private. For instance, a person might -try to make the LPDTL licensed code dependent on subroutines in proprietary -subroutines. This is why the LPDTL has a clause stating that all -*development* features must reside in the LPDTL code, or in GPL code, but -not non-GPL-compatible code. - -Although the LPDTL allows its use with software of almost any license, it -specifically forbids use with licenses doing any of the following: - -1. Restricting reverse engineering - -2. Restricting discussion about the software - -3. Code that includes software patents - -I feel that restrictions on reverse engineering and discussion, and software -patents, are so destructive to society, that I have included language -preventing use of LPDTL licensed code with any software incorporating any of -these three atrocities. diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/Node.pm b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/Node.pm deleted file mode 100644 index cec1f97..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/Node.pm +++ /dev/null @@ -1,475 +0,0 @@ -#!/usr/bin/perl -w - -####################################################################### -# Copyright (C) 2003 by Steve Litt, all rights reserved. -# Licensed under version 1 of the -# Litt Perl Development Tools License -# See COPYING file -# Or COPYING.LPDTL.1.0 -# Or see http://www.troubleshooters.com/licenses/LPDTL/COPYING.LPDTL.1.0 -# -# ABSOLUTELY NO WARRANTY, USE AT YOUR OWN RISK! -# -# Version 0.2.0 released 5/13/2004 - -use strict; - -package Node; -sub new($$$$) - { - my($typeOfClass) = $_[0]; - my($self) = {}; - bless($self, $typeOfClass); - - $self->{'name'}=$_[1]; - $self->{'type'}=$_[2]; - $self->{'value'}=$_[3]; - - - $self->{'nextsibling'}=undef; - $self->{'prevsibling'}=undef; - $self->{'parent'}=undef; - $self->{'firstchild'}=undef; - $self->{'lastchild'}=undef; - - $self->{'attributes'}={}; - - return($self); - } - - -#### For single attribute -sub setAttribute() - { - $_[0]->{'attributes'}->{$_[1]} = $_[2]; - } - -sub removeAttribute() - { - delete $_[0]->{'attributes'}->{$_[1]}; - } - -sub getAttribute() - { - if($_[0]->hasAttributes()) - { - return $_[0]->{'attributes'}->{$_[1]}; - } - else - { - return(undef); - } - } - -sub hasAttribute() - { - if($_[0]->hasAttributes()) - { - return defined($_[0]->getAttribute($_[1])); - } - else - { - return(undef); - } - } - -#### For attribute array -sub hasAttributes() - { - return defined($_[0]->getAttributes()); - } -sub getAttributes() - { - return %{$_[0]->{'attributes'}}; - } - -sub setAttributes() - { - $_[0]->{'attributes'} = $_[1]; - } - - - - -#### For traversing -sub getFirstChild() {return($_[0]->{'firstchild'});} -sub getNextSibling() {return($_[0]->{'nextsibling'});} -sub getParent() {return($_[0]->{'parent'});} - -sub hasFirstChild() {return(defined($_[0]->{'firstchild'}));} -sub hasNextSibling() {return(defined($_[0]->{'nextsibling'}));} -sub hasParent() {return(defined($_[0]->{'parent'}));} - -#### For reverse traversing -sub getLastChild() {return($_[0]->{'lastchild'});} -sub getPrevSibling() {return($_[0]->{'prevsibling'});} - -sub hasLastChild() {return(defined($_[0]->{'lastchild'}));} -sub hasPrevSibling() {return(defined($_[0]->{'prevsibling'}));} - -#### For content -sub getName() {return($_[0]->{'name'});} -sub getType() {return($_[0]->{'type'});} -sub getValue() {return($_[0]->{'value'});} -sub setName() {$_[0]->{'name'} = $_[1];} -sub setType() {$_[0]->{'type'} = $_[1];} -sub setValue() {$_[0]->{'value'} = $_[1];} - -sub hasName() {return(defined($_[0]->{'name'}));} -sub hasType() {return(defined($_[0]->{'type'}));} -sub hasValue() {return(defined($_[0]->{'value'}));} - -#### For setting pointers, should probably be private or protected -sub setFirstChild() {$_[0]->{'firstchild'} = $_[1];} -sub setNextSibling() {$_[0]->{'nextsibling'} = $_[1];} -sub setParent() {$_[0]->{'parent'} = $_[1];} -sub setLastChild() {$_[0]->{'lastchild'} = $_[1];} -sub setPrevSibling() {$_[0]->{'prevsibling'} = $_[1];} - -#### For creation -sub insertSiblingBeforeYou() - { - my($self) = $_[0]; - my($oldPrevSibling) = $self->getPrevSibling(); - $self->setPrevSibling($_[1]); - $self->getPrevSibling()->setParent($self->getParent()); - $self->getPrevSibling()->setNextSibling($self); - if(!defined($oldPrevSibling)) - { - $self->getParent()->setFirstChild($self->getPrevSibling()); - $self->getPrevSibling()->setPrevSibling(undef); - } - else - { - $self->getPrevSibling()->setPrevSibling($oldPrevSibling); - $oldPrevSibling->setNextSibling($self->getPrevSibling()); - } - return($self->getPrevSibling()); - } - -sub insertSiblingAfterYou() - { - my($self) = $_[0]; - my($oldNextSibling) = $self->getNextSibling(); - $self->setNextSibling($_[1]); - $self->getNextSibling()->setParent($self->getParent()); - $self->getNextSibling()->setPrevSibling($self); - if(!defined($oldNextSibling)) - { - if(defined($self->getParent())) - { - $self->getParent()->setLastChild($self->getNextSibling()); - } - $self->getNextSibling()->setNextSibling(undef); - } - else - { - $self->getNextSibling()->setNextSibling($oldNextSibling); - $oldNextSibling->setPrevSibling($self->getNextSibling()); - } - return($self->getNextSibling()); - } - -sub insertFirstChild() - { - my($self) = $_[0]; - my($oldFirstChild) = $self->getFirstChild(); - if(defined($oldFirstChild)) - { - $oldFirstChild->insertSiblingBeforeYou($_[1]); - } - else - { - $self->setFirstChild($_[1]); - $self->setLastChild($_[1]); - $self->getFirstChild()->setParent($self); - } - return($self->getFirstChild()); - } - -sub insertLastChild() - { - my($self) = $_[0]; - my($oldLastChild) = $self->getLastChild(); - if(defined($oldLastChild)) - { - $oldLastChild->insertSiblingAfterYou($_[1]); - } - else - { - $self->setFirstChild($_[1]); - $self->setLastChild($_[1]); - $self->getFirstChild()->setParent($self); - } - return($self->getLastChild()); - } - -#### For cloning -sub clone() - { - my($self) = $_[0]; - my($clone) = Node->new(); - $clone->setName($self->getName()); - $clone->setType($self->getType()); - $clone->setValue($self->getValue()); - - $clone->setParent($self->getParent()); - $clone->setFirstChild($self->getFirstChild()); - $clone->setLastChild($self->getLastChild()); - $clone->setPrevSibling($self->getPrevSibling()); - $clone->setNextSibling($self->getNextSibling()); - return($clone); - } - -#### For deletion -sub deleteSelf() - { - my($self) = $_[0]; - my($prev) = $self->getPrevSibling(); - my($next) = $self->getNextSibling(); - my($parent) = $self->getParent(); - if((defined($self->getPrevSibling()))&&(defined($self->getNextSibling()))) - { - $self->getNextSibling()->setPrevSibling($self->getPrevSibling()); - $self->getPrevSibling()->setNextSibling($self->getNextSibling()); - } - elsif((!defined($self->getPrevSibling()))&&(!defined($self->getNextSibling()))) - { - $self->getParent()->setFirstChild(undef); - $self->getParent()->setLastChild(undef); - } - elsif(!defined($self->getPrevSibling())) - { - $self->getParent()->setFirstChild($self->getNextSibling()); - $self->getNextSibling()->setPrevSibling(undef); - } - elsif(!defined($self->getNextSibling())) - { - $self->getParent()->setLastChild($self->getPrevSibling()); - $self->getPrevSibling()->setNextSibling(undef); - } - $self->setFirstChild(undef); - $self->setLastChild(undef); - } - -sub deleteTree() - { - my($self) = $_[0]; - -# #### Code to delete children and decendents here - $self->deleteSelf(); - } - -package OutlineParser; -sub new() - { - my($typeOfClass) = $_[0]; - my($self) = {}; - bless($self, $typeOfClass); - $self->{'head'} = Node->new("Header Node", "Head", "Inserted by OutlineParser"); - $self->{'fromstdin'} = 1; - $self->{'zapblanks'} = 1; - return($self); - } - -sub setCommentChar($$) - { - $_[0]->{'commentchar'} = $_[1]; - } - -sub getCommentChar($) - { - return($_[0]->{'commentchar'}); - } - -sub hasCommentChar($) - { - return(defined($_[0]->{'commentchar'})); - } - -sub getFirstNonBlankChar($$) - { - my $self = shift; - my $line = shift; - chomp $line; - my @parts = split(/\s+/,$line, 2); - $line = join('', @parts); - my $firstchar = substr($line, 0, 1); - return $firstchar; - } - - -sub parse() - { - my($self) = $_[0]; - my($fname) = $_[1]; - - my(@levelStack); - push(@levelStack, ($self->{'head'})); - my($checker) = $self->{'head'}; - my($lineno) = 0; - my($prevLevel) = -1; - - my($inf); - if($self->{'fromstdin'} == 0) - { - defined($fname) or die "OutlineParser::parse() requires a filename argument, terminating.\n"; - open(INF, "<" . $fname) or die "OutlineParser::parse() could not open $fname for input, terminating.\n"; - $inf = q(INF); - } - else - { - $inf = qw(STDIN); - } - while(<$inf>) - { - my($line) = $_; - chomp($line); - $lineno++; - my $zapFlag = 0; - my $firstNonBlankChar = $self->getFirstNonBlankChar($line); - if(($self->{'zapblanks'} != 0) && ($firstNonBlankChar eq '')) - { - $zapFlag = 1; - } - if($self->hasCommentChar() && ($self->getCommentChar() eq $firstNonBlankChar)) - { - $zapFlag = 1; - } - - unless($zapFlag) - { - my($level) = 0; - - $line =~ m/^( *)(.*)/; - if(defined($1)) - { - $level = length($1); - $line = $2; - } - else - { - $line = $2; - } - - my $node = Node->new("", "Node", $line); - $node->setAttribute('_lineno', $lineno); - - if($level == $prevLevel) - { - $levelStack[$prevLevel]->insertSiblingAfterYou($node); - $levelStack[$level] = $node; - } - elsif($level == $prevLevel + 1) - { - $levelStack[$prevLevel]->insertFirstChild($node); - $levelStack[$level] = $node; - } - elsif($level > $prevLevel + 1) - { - die "Multiple indent at line $lineno, \"$line\", terminating.\n"; - } - elsif($level < $prevLevel) - { - my($dedent) = $prevLevel - $level; - while($level < $prevLevel) - { - pop(@levelStack); - $prevLevel--; - } - $levelStack[$prevLevel]->insertSiblingAfterYou($node); - $levelStack[$level] = $node; - } - $prevLevel = $level; - } - } - if($self->{'fromstdin'} == 0) {close(INF);} - return($self->getHead()); - } - -sub fromStdin() {$_[0]->{'fromstdin'} = 1;} -sub fromFile() {$_[0]->{'fromstdin'} = 0;} -sub zapBlanks() {$_[0]->{'zapblanks'} = 1;} -sub dontZapBlanks() {$_[0]->{'zapblanks'} = 0;} -sub getHead() {return($_[0]->{'head'});} - - -package Walker; -sub new() - { - my $typeOfClass = $_[0]; - my $self = {}; - bless($self, $typeOfClass); - $self->{'top'} = $_[1]; - $self->{'entrycallback'} = $_[2]; - $self->{'exitcallback'} = $_[3]; - return($self); - } - -sub walk() - { - my($self) = $_[0]; - my($ascending) = 0; - my($checker)=$self->{'top'}; # like a checker you move around a board - my($level)=0; - my($continue) = 1; - my $counter = 0; - while($continue) - { - if($ascending == 0) - { - if(defined($self->{'entrycallback'})) - { - my @args = @{$self->{'entrycallback'}}; - my $sub = shift(@args); - push(@args, ($checker, $level)); - &{$sub}(@args); - } - if($level < 0) {$continue=0;} ## Callback sets negative to terminate - } - else - { - if(defined($self->{'exitcallback'})) - { - my @args = @{$self->{'exitcallback'}}; - my $sub = shift(@args); - push(@args, ($checker, $level)); - &{$sub}(@args); - } - if($level < 0) {$continue=0;} ## Callback sets negative to terminate - if($checker == $self->{'top'}) {$continue=0;} - } - - if($continue == 0) - { - #skip this if/elsif/else entirely - } - elsif(($ascending == 0) && (defined($checker->getFirstChild()))) - { - $ascending = 0; - $checker = $checker->getFirstChild(); - $level++; - } - elsif((defined($checker->getNextSibling())) && ($checker != $self->{'top'})) - { - $ascending = 0; - $checker = $checker->getNextSibling(); - } - elsif(defined($checker->getParent())) - { - $ascending = 1; - $checker = $checker->getParent(); - $level--; -# if($level < 1) {$continue = 0;} - } - else - { - $continue = 0; - } - $counter++; - } - } - - -1; - diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/README.otl b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/README.otl deleted file mode 100644 index 2d10d5e..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/README.otl +++ /dev/null @@ -1,177 +0,0 @@ -MANUAL FOR THE Node.pm Tool - Version 0.2.0 released 5/13/2004 -License - Litt Perl Development Tools License, version 1 - See COPYING file - This license is the GNU GPL with an exception - See COPYING.GPL - NO WARRANTY!!!!! See COPYING.GPL -Purpose - Handling hierarchies in Perl - Implements a tree of nodes - Each node has a name, a type, a value, and optionally attributes - Each node can have zero, one or many attributes - Each attribute has a name and a value - Especially made to handle tab indented outlines in memory -Learning Node.pm - Learn from the example programs: Study them in this order: - example_hello.pl - example_parse.pl - example_otl2markup.pl - example_attribs.pl - example_bylevel.pl - example_delete.pl - example_insert.pl - example_nodepath.pl - That's the only way to learn this tool - Do each example program in order - Run - Read - Study - Example programs - example_hello.pl - Proof of concept - 7 lines of perl - Instantiate and read from a Node object - example_parse.pl - Parse a tab indented outline file into a Node tree - Use a Walker object to walk the tree and print the Nodes - Create a Callback object and callback routine - example_otl2markup.pl - Use return callback to create end tags - example_attribs.pl - Set and get Node attributes - Observer "_lineno" attribute, - which was set by the Parser object - example_bylevel.pl - Read the Node tree recursively and output by level - Use the Callbacks object to store information - Use multiple callbacks to simplify a complex algorithm - Observe that the performance is still quite good - example_delete.pl - Delete nodes during a callback - Observe that the Walker object takes the deletion in stride - Observe that the Walker object does not "lose its place" - example_insert.pl - Insert nodes - Build a Node tree without an outline or Parser object - Create child nodes using an array - Create child nodes from a callback routine - Use a return callback to count occurrences within in its subtree - Access and use a Node's name, type and value - Move nodes within the tree - example_nodepath.pl - Load a Node.pm file in a different directory - Load a Node.pm file at runtime from an entry in a config file - Use an environment variable to change the name of the config file -File manifest - Documentation - INSTALL - README.otl - Licensing - COPYING - COPYING.GPL - COPYING.LPDTL.1.0 - LPDTL_discuss.txt - Node.pm file - - Node.pm - Example Programs - example_hello.pl - example_parse.pl - example_otl2markup.pl - example_attribs.pl - example_bylevel.pl - example_delete.pl - example_insert.pl - example_nodepath.pl - Sample node path config file (for example_nodepath.pl) - myapp.cfg - Sample outline (used for example_delete.pl) - deletetest.otl -Objects - Node.pm implements three object types: - Node - OutlineParser - Walker - Node - A single element in the hierarchy - All nodes connected - Parent pointer - (the pointer is a Perl reference, of course) - First child pointer - Last child pointer - Previous sibling pointer - Last sibling pointer - Each node has: - A name - hasName() - getName() - setName() - A type - hasType() - getType() - setType() - A value - hasValue() - getValue() - setValue() - Zero, one or many attributes - Each attribute has a name and a value - Single attribute methods: - hasAttribute() - getAttribute() - setAttribute() - removeAttribute() - Attribute array methods: - hasAttributes() - getAttributes() - setAttributes() - Node methods enable all hierarchy operations - Node insertion - insertFirstChild() - insertLastChild() - insertSiblingBeforeYou() - insertSiblingAfterYou() - Node deletion - deleteSelf() - Low level node traversal - hasFirstChild() - getFirstChild() - hasLastChild() - getLastChild() - hasPrevSibling() - getPrevSibling() - hasNextSibling() - getNextSibling() - hasParent() - getParent() - OutlineParser - Object to convert a tab indented outline to a tree of Node objects - Outline must be well formed... - Each line indented zero or one tab to the right of its parent - You can set and access properties of the parse - hasCommentChar() - getCommentChar() - setCommentChar() - fromStdin() - fromFile() - zapBlanks() - dontZapBlanks() - After setting parse properties, you perform the parse - my parser = OutlinerParser->new(); - parser->setCommentChar('#'); - parser->fromFile(); - my $topNode = parser->parse("myoutline.txt"); - Walker - Object to traverse entire Node hierarchy - Performs actions via callback routines - my $walker = Walker->new($topNode, $entryCallbackRef, $returnCallbackRef); - Entry callback occurs when node is first accessed - Return callback occurs when node is re-accessed after going through children - Callbacks should be object methods, not freestanding - Callbacks must take 3 arguments: - $self: The object containing the callback - [\&Callbacks::cbPrintNodeInfo, $callbacks]); -Installation - See INSTALL file diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/deletetest.otl b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/deletetest.otl deleted file mode 100644 index e7d34da..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/deletetest.otl +++ /dev/null @@ -1,18 +0,0 @@ -Top - Level2 - Level2b - Level3 - deleteme - gone - gone - deleteme - gone - gone - this should stay - deleteme - deleteme - gone - gone - Level3b - 2level2 -Top2 diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_attribs.pl b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_attribs.pl deleted file mode 100755 index d82610f..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_attribs.pl +++ /dev/null @@ -1,162 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (C) 2004 by Steve Litt -# Licensed with the GNU General Public License, Version 2 -# ABSOLUTELY NO WARRANTY, USE AT YOUR OWN RISK -# See http://www.gnu.org/licenses/gpl.txt - -##################################################################### -# This exercise demonstrates the use of attributes for each node. -# Attributes are facts about an entity, rather than an entity itself. -# In real practice, many times attributes can be substituted for nodes -# and vice versa. However, an attribute CANNOT have children. -# -# This is the first exercise using multiple Walker objects. The first -# Walker object counts each node's children, and if the node has -# children, it creates an attribute named "children" for that node. -# The value of the attribute is the number of direct children for -# that node. -# -# Nodes are accessed two ways in the cbPrintNode() callback. The entire -# attribute hash is accessed with hasAttributes and getAttributes(), -# while single named attributes are accessed with hasAttributes and -# getAttributes(). -# -# One more action that's demonstrated is the use of secondary navigation -# within a callback routine. For each node, the callback routine -# navigates to the first child and then each successive sibling of that -# child in order to count the direct children. This is a common -# algorithm with Node.pm. It might look inefficient, and you might be -# tempted to perform the count during the callback that prints the -# information. Don't do it. Multiple walkers help keep Node.pm -# enabled programs easy to understand and modify. Because the -# entire node tree is in memory, the double navigation isn't -# particularly slow. -# -# Real world programs make heavy use of multiple walkers. For instance, -# the EMDL to UMENU program (not packaged here) has over 10 walkers. -# -##################################################################### - -use strict; # prevent hard to find errors - -use Node; # Use Note.pm tool - -package Callbacks; -sub new() - { - my($type) = $_[0]; - my($self) = {}; - bless($self, $type); - $self->{'errors'} = 0; - $self->{'warnings'} = 0; - return($self); - } - -sub getErrors(){return $_[0]->{'errors'};} -sub getWarnings(){return $_[0]->{'warnings'};} - -sub cbCountChildren() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} - - my $childCount=0; - if($checker->hasFirstChild()) - { - $childCount++; - my $checker2 = $checker->getFirstChild(); - while($checker2->hasNextSibling()) - { - $childCount++; - $checker2 = $checker2->getNextSibling(); - } - $checker->setAttribute("children", $childCount); - } - } - -sub cbPrintNode() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} # don't process undef node - - for(my $n=0; $n < $level; $n++) {print "\t";} - print "* "; - print $checker->getValue(); # print the text of the node - print "\n"; - - for(my $n=0; $n <= $level; $n++) {print "\t";} - print "("; - - my %attribs = {}; - %attribs = $checker->getAttributes() if $checker->hasAttributes(); - - my @keys = keys(%attribs); - foreach my $key (sort @keys) - { - print $key, "=", $attribs{$key}, "; "; - } - - print ")\n"; - - if($checker->hasAttribute("children")) - { - for(my $n=0; $n <= $level; $n++) {print "\t";} - print "This node has "; - print $checker->getAttribute("children"); - print " children.\n"; - } - } - -package Main; - -sub main() - { - #### PARSE FROM FILE README.otl - my $parser = OutlineParser->new(); # instantiate parser - $parser->setCommentChar("#"); # ignore lines starting with # - $parser->fromFile(); # get input from file - my $topNode=$parser->parse("README.otl"); - - #==================================================================== - # The preceding statement parses file README.otl into a node hierarchy - # and assigns the top level node of that hierarchy to $topNode. When - # you run the program you'll notice that the text in $topNode does - # not appear in README.otl, but instead has value - # "Inserted by OutlineParser". - # - # This is a feature, not a bug. In order to accommodate the typical - # case of an outline having several top level items, and yet still - # be able to represent the whole hierarchy as a single top node, - # the OutlineParser object creates a new node with value - # " Inserted by OutlineParser" - # and places all the outline's top level items under that newly - # created node. - # - # If the outline you're working on is guaranteed to have only - # a single top level item, and if you want that to be the top - # level node, you can simply do the following: - # - # $topNode=$topNode->getFirstChild(); - #==================================================================== - - #### INSTANTIATE THE Callbacks OBJECT - my $callbacks = Callbacks->new(); - - #### WALK THE NODE TREE, - #### OUTPUTTING LEVEL AND TEXT - my $walker = Walker->new - ( - $topNode, - [\&Callbacks::cbCountChildren, $callbacks] - ); - $walker->walk(); - my $walker = Walker->new - ( - $topNode, - [\&Callbacks::cbPrintNode, $callbacks] - ); - $walker->walk(); - } - -main(); diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_bylevel.pl b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_bylevel.pl deleted file mode 100755 index d60d7f6..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_bylevel.pl +++ /dev/null @@ -1,227 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (C) 2004 by Steve Litt -# Licensed with the GNU General Public License, Version 2 -# ABSOLUTELY NO WARRANTY, USE AT YOUR OWN RISK -# See http://www.gnu.org/licenses/gpl.txt - -use strict; # prevent hard to find errors - -use Node; # Use Node.pm tool - -##################################################################### -# The Walker object walks the node hierarchy recursively. That is, -# it goes deep before going laterally. That's just what's needed for -# many applications. However, sometimes it's necessary to look at -# one level at a time. -# -# There are many ways to accomplish this. Some involve sorting and -# merging. Many involve arrays of nodes on a given level, and -# plunging one deep into each one. -# -# In this example we'll start with a walker that assigns the full -# path to each node as an attribute of that node. We'll then loop -# through all levels starting with 0, and for each one we'll print all -# children of nodes at that level. Every time there's a parent change, -# we'll print a header for that parent. -# -# This example also illustrates the use of variables within the -# Callback object. You might have wondered why callbacks must be -# part of an object rather than free floating functions. The answer -# is that the use of callbacks as object methods means that we can -# keep totals and break logic variables within the callback object, -# thereby eliminating the (nasty) necessity of global variables. -# -# We cannot simply pass variables into and out of callback -# routines because, by the very nature of a callback routine, -# its arguments and return type are strictly predefined. In the -# case of Node.pm the arguments are always $self, $checker and -# $level. To get any other information into or out of the callback -# routine, we must use a non-callback method of the same object. -# -# It should be noted that there's nothing wrong with having -# multiple callback objects. If there are numerous callback -# routines it might make sense to group them by functionality, -# or by totals and persistent variables they must keep track of. -# -# As you run, study and understand this code, be aware that converting -# a hierarchy to a list by levels is a very difficult and complex task. -# Imagine keeping a list of children, and for each level using those -# children to find the next generation, and rewriting the array. Or -# prepending a level number followed by a child index on each line, -# and then sorting the whole array by the level number and child -# index, and finally running a routine to output the formatted -# output, complete with break logic and headers. -# -# Now consider how easy Node.pm made this job. First, a trivial -# Walker to calculate full paths, then a level loop calling a -# Walker to print only children of nodes at the desired level. The -# code is short, and it's very readable and understandable. The -# callback routines are short enough that you can safely use non- -# structured techniques such as returning from the middle instead -# of using nested if statements. The result is even more readability. -# -# One could make the (very valid) point that nodes are visited many -# times to process each once, and that this is not efficient in -# terms of runtime performance. Absolutely true! -# -# However, the programming simplicity prevents truly collosal -# efficency problems, such as cascading intermediate files, sorts, -# and the various other CPU cycle grabbers that seem to crop up -# in complex algorithms. And remember, the entire tree is in memory, -# with navigation via simple pointers, so the environment of Node.pm -# favors runtime speed. -# -# Case in point. My original EMDL to UMENU converter was such an -# epic production that I needed to study it for 4 hours every time -# I made a minor improvement. I had developed it using informal OOP -# and structured techniques, and had paid close attention to -# efficiency. The resulting program took 15 seconds to convert a -# 2300 line EMDL file. -# -# I rewrote the converter using Node.pm. This was a complete -# rewrite -- all new code -- no salvage. It was so much simpler -# that I wrote it in 12 hours. But I was very concerned with -# runtime. If the 15 seconds doubled, this would be a hassle, -# and if it quadrupled it would be totally impractical. When -# I ran it, the program did everything the original did, but -# did it in 2 seconds. Node.pm had given me a 7 fold speed -# increase. -# -##################################################################### - -package Callbacks; -sub new() - { - my($type) = $_[0]; - my($self) = {}; - bless($self, $type); - $self->{'errors'} = 0; - $self->{'warnings'} = 0; - $self->{'childrenatlevel'} = 0; - $self->{'currentlevel'} = 0; - $self->{'previousparentfullpath'} = "initialize"; - return($self); - } - -sub getErrors(){return $_[0]->{'errors'};} -sub getWarnings(){return $_[0]->{'warnings'};} - -sub getChildrenAtLevel(){return $_[0]->{'childrenatlevel'};} -sub setChildrenAtLevel(){$_[0]->{'childrenatlevel'} = $_[1];} -sub incChildrenAtLevel(){$_[0]->{'childrenatlevel'}++;} - -sub getCurrentLevel(){return $_[0]->{'currentlevel'};} -sub setCurrentLevel(){$_[0]->{'currentlevel'} = $_[1];} - -sub cbCalculateFullPath() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} # don't process undef node - - if($checker->hasParent) - { - my $fullpath = $checker->getParent()->getAttribute("fullpath"); - $fullpath .= "/"; - $fullpath .= $checker->getValue(); - $checker->setAttribute("fullpath", $fullpath); - } - else - { - $checker->setAttribute("fullpath", $checker->getValue()); - } - } - -sub cbPrintNode() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} # don't process undef node - - #### DO NOTHING UNLESS THIS NODE IS AT THE CURRENTLY SOUGHT LEVEL - return unless $level == $self->getCurrentLevel(); - - #### DO NOTHING UNLESS THIS NODE HAS CHILDREN - return unless $checker->hasFirstChild(); - - #### PRINT HEADER - print "\n", $checker->getAttribute("fullpath"), "\n"; - - #### PRINT CHILDREN AND COUNT CHILDREN AT LEVEL - my $checker2 = $checker->getFirstChild(); # We returned if there wasn't one - print "\t", $checker2->getValue(), "\n"; - $self->incChildrenAtLevel(); - - while($checker2->hasNextSibling()) - { - $checker2 = $checker2->getNextSibling(); - print "\t", $checker2->getValue(), "\n"; - $self->incChildrenAtLevel(); - } - } - - -package Main; - -sub main() - { - #### PARSE FROM FILE README.otl - my $parser = OutlineParser->new(); # instantiate parser - $parser->setCommentChar("#"); # ignore lines starting with # - $parser->fromFile(); # get input from file - my $topNode=$parser->parse("README.otl"); - - - #### INSTANTIATE THE Callbacks OBJECT - my $callbacks = Callbacks->new(); - - #### WALK THE NODE TREE, - #### CALCULATING FULL PATHS AND PUTTING THEM IN AN ATTRIBUTE - my $walker = Walker->new - ( - $topNode, # start with this node - [\&Callbacks::cbCalculateFullPath, $callbacks] # do this on entry to each node - ); - $walker->walk(); - - #### PRINT LEVEL 0 - print "\n\n********** BEGIN LEVEL ", "0", "\n"; - print "\t", $topNode->getValue(), "\n"; - - #### SET STARTING PARENT LEVEL, - #### AND SET $childCount SO THE LOOP WILL FIRE THE FIRST TIME - my $level=0; - my $childCount=9999; - - #================================================================== - # The main loop follows, level by level. At each level, nodes are - # queried for their children, which are then printed below the - # node's full path. The result is a list of nodes sorted by - # level. - # - # We add 1 to the level in the level header because we're referring - # to the level of the children, not of the current node. We keep - # looping to deeper levels until a level counts no children. - # - # This logic result in an empty level header at the bottom. If this - # were a big concern, we could print the level headers in the - # Callbacks::cbPrintNode() callback, with slightly altered logic. - # However, it's a minor point, so for simplicity we print the - # level header at the top of this loop in the main routine. - #================================================================== - while($childCount > 0) - { - print "\n\n********** BEGIN LEVEL ", $level + 1, "\n"; - $callbacks->setChildrenAtLevel(0); - $callbacks->setCurrentLevel($level); - my $walker = Walker->new - ( - $topNode, - [\&Callbacks::cbPrintNode, $callbacks] - ); - $walker->walk(); - $childCount = $callbacks->getChildrenAtLevel(); - $level++; - } - } - -main(); diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_delete.pl b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_delete.pl deleted file mode 100755 index 810507b..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_delete.pl +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (C) 2004 by Steve Litt -# Licensed with the GNU General Public License, Version 2 -# ABSOLUTELY NO WARRANTY, USE AT YOUR OWN RISK -# See http://www.gnu.org/licenses/gpl.txt - -use strict; # prevent hard to find errors - -use Node; # Use Node.pm tool - -##################################################################### -# This exercise demonstrates the deletion of nodes. -# -# Because Perl is a garbage collection language, node deletion -# DOES NOT deallocate memory and the like. However, in the absense -# of a copy of the node, it will be garbage collected and unavailable. -# Also, the deletion process specificly undef's the deleted node's -# first and last children. -# -# You noticed I mentioned keeping a copy. The algorithm of a Walker -# object moves a node around the tree like a checker. Calling -# $checker->deleteSelf() does not render $checker undefined. In fact, -# it still has its parent, nextSibling and previousSibling pointers -# intact. What this means is that the Walker's next iteration goes -# to exactly the same node as it would have if the deletion had not -# taken place. In other words, you do not need to "move the checker -# back one" after a deletion. -# -# This makes deletion algorithms very simple. -# -# There may come a time when you want to delete a node but keep its -# children. In that case, you must first attach its children to nodes -# that will not be deleted. -# -##################################################################### - -package Callbacks; -sub new() - { - my($type) = $_[0]; - my($self) = {}; - bless($self, $type); - $self->{'errors'} = 0; - $self->{'warnings'} = 0; - return($self); - } - -sub getErrors(){return $_[0]->{'errors'};} -sub getWarnings(){return $_[0]->{'warnings'};} - -sub cbDelete() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} # don't process undef node - - #### DELETE THIS NODE IF ITS VALUE CONTAINS deleteme - my $text = "init"; - $text = $checker->getValue() if $checker->hasValue(); - if($text =~ m/deleteme/) - { - $checker->deleteSelf(); - } - } - -sub cbPrintNode() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} - - for(my $n=0; $n < $level; $n++) {print "\t";} - print $checker->getValue(), "\n"; - } - -package Main; - -sub main() - { - #### PARSE FROM FILE README.otl - my $parser = OutlineParser->new(); - $parser->setCommentChar("#"); - $parser->fromFile(); - my $topNode=$parser->parse("deletetest.otl"); - - #### INSTANTIATE THE Callbacks OBJECT - my $callbacks = Callbacks->new(); - - #### WALK THE NODE TREE, - #### DELETING NODES WITH "deleteme" IN THEM - my $walker = Walker->new - ( - $topNode, - [\&Callbacks::cbDelete, $callbacks] - ); - $walker->walk(); - - #### WALK THE NODE TREE, - #### OUTPUTTING LEVEL AND TEXT - $walker = Walker->new - ( - $topNode, - [\&Callbacks::cbPrintNode, $callbacks] - ); - $walker->walk(); - } - -main(); diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_hello.pl b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_hello.pl deleted file mode 100755 index cf46fad..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_hello.pl +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (C) 2004 by Steve Litt -# Licensed with the GNU General Public License, Version 2 -# ABSOLUTELY NO WARRANTY, USE AT YOUR OWN RISK -# See http://www.gnu.org/licenses/gpl.txt - -use strict; # prevent hard to find errors -use Node; - -my $topNode = Node->new("myname", "mytype", "myvalue"); -print "\n::: "; -print $topNode->getName(), " ::: "; -print $topNode->getType(), " ::: "; -print $topNode->getValue(), " :::\n"; diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_insert.pl b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_insert.pl deleted file mode 100755 index 4fd82fa..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_insert.pl +++ /dev/null @@ -1,550 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (C) 2004 by Steve Litt -# Licensed with the GNU General Public License, Version 2 -# ABSOLUTELY NO WARRANTY, USE AT YOUR OWN RISK -# See http://www.gnu.org/licenses/gpl.txt - -use strict; # prevent hard to find errors - -use Node; # Use Node.pm tool - -##################################################################### -# WARNING: This is a difficult exercise. Do not attempt this exercise -# until you have completed the prerequisites listed in the README.otl -# file. -# -# I suggest you approach this example starting with the main routine -# at the bottom of the file, and then drilling down into subroutines -# and callbacks. Understand the big picture before drilling down. -# -# This exercise demonstrates insertion of nodes, and much, much more. -# Insertion is accomplished by the insertFirstChild(), -# insertSiblingBeforeYou(), insertSiblingAfterYou(), and -# insertLastChild() methods. The insertLastChild() method is not -# demonstrated. -# -# This exercise is VERY contrived. It is contrived to show techniques -# of building a node tree using insertions, and also how to switch -# two nodes. The switching of the two nodes is especially contrived, -# but I could think of no better way of demonstrating node moving. -# -# This exercise builds a tree that represents a date book type calendar. -# Level 0 is Calender, level 1 are the years, of which there is only 2004, -# Level 2 are the months, level 3 the days, and level 4 the hour long -# timeslots. There is no provision for weekends, nor after hours -# appointments. It is a demonstration only. -# -# Using an array of month names and an array of days per month, you build -# the month and day levels using a nested loop. The hour level is built -# using a Walker. Node names are things like "January" or 31 or -# "11:00-12:00". Node types are things like "Year", "Month", "Day" or -# "Hour". Node values are undefined unless an appointment is made, in -# which case the value is the node text. -# -# A special Walker is used to mark any day, month or year entities -# if they contain appointments. Specifically, all appointments in that -# day, month or year are counted, and that number of stars are placed -# beside the day, month or year. This is implemented by using an -# return callback so that by the time the callback is called, all children -# have been calculated. -# -##################################################################### - -package Callbacks; -sub new() - { - my($type) = $_[0]; - my($self) = {}; - bless($self, $type); - $self->{'errors'} = 0; - $self->{'warnings'} = 0; - return($self); - } - -sub getErrors(){return $_[0]->{'errors'};} -sub getWarnings(){return $_[0]->{'warnings'};} - -#================================================================= -# The cbMakeMarks() callback is called on return to a node from -# its children (return callback). It executes only on year, month -# and day nodes. It iterates through all its immediate children, -# totalling up the "appointments" attribute and setting its -# own attribute to that total. Remember, because this is a -# callback triggered on return from children, it is guaranteed -# that all children have been counted, and that all those children -# have totalled their children, etc. -# -# In the case of a day node, instead of totalling the "appointments" -# attribute, it counts the number of hour nodes with defined values. -# A defined value on an hour node is an appointment. -# -# Last but not least, on non-zero counts, this callback sets the -# day, month or year node's value to a number of asterisks equal -# to the number of appointments in its subtree. -# -# Read this code carefully. Once you understand it, you'll have -# many insights to Node.pm. -#================================================================= -sub cbMakeMarks() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} # don't process undef node - - #### PROCESS ONLY DAY, MONTH OR YEAR NODES - unless ( - $checker->getType() eq "Day" || - $checker->getType() eq "Month" || - $checker->getType() eq "Year" - ) - { - return; - } - - my $count = 0; - my $childNode = $checker->getFirstChild(); - while(defined($childNode)) - { - if($checker->getType() eq "Day") - { - if(defined($childNode->getValue())) - { - $count++; - } - } - else - { - if($childNode->hasAttribute("appointments")) - { - $count += $childNode->getAttribute("appointments"); - } - } - $childNode = $childNode->getNextSibling(); - } - $checker->setAttribute("appointments", $count); - if($count > 0) - { - my $string; - for(my $n=0; $n < $count; $n++){$string .= '*';} - $checker->setValue($string); - } - } - -#================================================================= -# The cbInsertHours() callback operates ONLY on day nodes. When -# called from a day node, it inserts hourlong appointment slots -# starting at 8am and ending at 5pm. The code is pretty -# straightforward. -#================================================================= -sub cbInsertHours() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} # don't process undef node - - - return unless $checker->getType() eq "Day"; # Insert hours under days only - - my $checker2; - for(my $n=8; $n <= 16; $n++) - { - my $startHour = "$n:00"; - my $n2 = $n + 1; - my $endHour = "$n2:00"; - my $node = Node->new("$startHour" . "-" . "$endHour", "Hour", undef); - if($checker->hasFirstChild()) - { - $checker2 = $checker2->insertSiblingAfterYou($node); - } - else - { - $checker2 = $checker->insertFirstChild($node); - } - } - } - -#================================================================= -# The cbPrintNode() callback prints the name of the node, -# and its value if a value is defined. It's very straighforward. -#================================================================= -sub cbPrintNode() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} # don't process undef node - - #### DON'T PRINT LEVEL 0 (CALENDER) - return if $level == 0; - - for(my $n=1; $n < $level; $n++) { print "\t";} - - print $checker->getName() if $checker->hasName(); - print ": "; - - print $checker->getValue() if $checker->hasValue(); - print "\n"; - } - - -#================================================================= -# The cbPrintNodeDiagnosic() callback is not used, but provided -# for any necessary debugging. -#================================================================= -sub cbPrintNodeDiagnostic() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} # don't process undef node - - for(my $n=0; $n < $level; $n++) { print "\t";} - - print ">"; - print $checker->getName() if $checker->hasName(); - print " ::: "; - - print $checker->getType() if $checker->hasType(); - print " ::: "; - - print $checker->getValue() if $checker->hasValue(); - print "<\n"; - } - -package Main; - -########################################################################### -# The insertDays() subroutine handles insertion of days below all -# month nodes. -########################################################################### -sub makeAppointments($) - { - my $yearNode = shift; - #### MARCH 22 AT 8AM - my $monthNode = $yearNode->getFirstChild() -> #January - getNextSibling() -> #February - getNextSibling(); #March - my $dayNode = $monthNode->getFirstChild(); - while($dayNode->getName() != 22) - { - $dayNode = $dayNode->getNextSibling(); - unless(defined($dayNode)) - { - die "No March 22\n"; - } - } - my $hourNode = $dayNode->getFirstChild(); - $hourNode->setValue("Spring Cleaning"); - - #### JUNE 22 AT 9AM - #### WRONGLY LABELED AS FALL FESTIVAL - #### INSTEAD OF SUMMER BREAK - $monthNode = $monthNode->getNextSibling() -> # April - getNextSibling() -> # May - getNextSibling(); # June - $dayNode = $monthNode->getFirstChild(); - while($dayNode->getName() != 22) - { - $dayNode = $dayNode->getNextSibling(); - unless(defined($dayNode)) - { - die "No June 22\n"; - } - } - $hourNode = $dayNode->getFirstChild()->getNextSibling(); - $hourNode->setValue("Fall Festival"); - - #### SEPTEMBER 22 AT 10AM - #### WRONGLY LABELED AS FALL FESTIVAL - #### INSTEAD OF SUMMER BREAK - $monthNode = $monthNode->getNextSibling() -> # July - getNextSibling() -> # August - getNextSibling(); # September - $dayNode = $monthNode->getFirstChild(); - while($dayNode->getName() != 22) - { - $dayNode = $dayNode->getNextSibling(); - unless(defined($dayNode)) - { - die "No September 22\n"; - } - } - $hourNode = $dayNode -> getFirstChild() -> #8-9 - getNextSibling() -> # 9-10 - getNextSibling(); # 10-11 - $hourNode->setValue("Summer Break"); - - #### DECEMBER 22 FROM 3PM TO 5PM (2 TIMESLOTS) - #### HAPPY HOLIDAYS PARTY - $monthNode = $monthNode->getNextSibling() -> # October - getNextSibling() -> # November - getNextSibling(); # December - $dayNode = $monthNode->getFirstChild(); - while($dayNode->getName() != 22) - { - $dayNode = $dayNode->getNextSibling(); - unless(defined($dayNode)) - { - die "No December 22\n"; - } - } - $hourNode = $dayNode->getFirstChild(); - while($hourNode->getName() ne "15:00-16:00") - { - $hourNode = $hourNode->getNextSibling(); - unless(defined($hourNode)) - { - die "No 4pm slot\n"; - } - } - $hourNode->setValue("Happy Holidays Party"); - $hourNode = $hourNode->getNextSibling(); - $hourNode->setValue("Happy Holidays Party"); - - #### DECEMBER 30 AT 9AM BUY PARTY SUPPLIES - while($dayNode->getName() != 30) - { - $dayNode = $dayNode->getNextSibling(); - unless(defined($dayNode)) - { - die "No December 30\n"; - } - } - $hourNode = $dayNode->getFirstChild()->getNextSibling(); - $hourNode->setValue("Buy Party Supplies"); - } - -########################################################################### -# The insertMonthsAndDays() subroutine handles insertion of months -# below the year, and days below every month. It works by iterating through -# an array of months, and finding number of days in an array of month -# lengths. It does NOT use the Node.pm navigational system to find months. -# Use of the Node.pm navigational system for this purpose is demonstrated -# in the insertion of hours in all days. -# -# Note that we could have avoided using a nested loop by using a Walker -# and associated callback to install the days under every month. In such -# a case the array of month lengths would have been placed in the Callback -# object. However, for the sake of variety, we chose to use a nested loop -# to load the months and days. -########################################################################### -sub insertMonthsAndDays($) - { - my $yearNode = shift; - my $checker = $yearNode; - my $checker2; - my @monthNames=("January", "February", "March", "April", "May", - "June", "July", "August", "September", "October", - "November", "December"); - my @monthLengths=(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); - my $monthSS = 0; - foreach my $monthName (@monthNames) - { - my $node = Node->new($monthName, "Month", undef); - $node->setAttribute("days", $monthLengths[$monthSS]); - if($yearNode->hasFirstChild()) - { - $checker = $checker->insertSiblingAfterYou($node); - } - else - { - $checker = $yearNode->insertFirstChild($node); - } - for(my $n=1; $n <= $monthLengths[$monthSS]; $n++) - { - $node = Node->new($n, "Day", undef); - if($checker->hasFirstChild()) - { - $checker2 = $checker2->insertSiblingAfterYou($node); - } - else - { - $checker2 = $checker->insertFirstChild($node); - } - } - $monthSS++; - } - } - -########################################################################### -# This subroutine switches the June 22 9am appointment and the -# September 22 10am appointment. In each case, both the appointment -# text and the time needed switching. -# -# The sane way to accomplish this task would have been to modify -# the nodes in place. However, this subroutine was created solely to -# demonstrate the movement of nodes, so that's what we did. -# -# Note that the fact that the two are at different times complicates the -# situation. It's not enough to just trade nodes -- the Sept 9am node -# must be placed after the existing June 10am node, which itself is after -# the erroneous June 9am node containing what should be September's -# appointment. After such placement, the original June 9am node must -# have its name updated so that it is a 10am node. A similar process -# takes place for September. The original nodes are also deleted. -# -# Please follow the (convoluted and contrived) logic: -# 1. Store the June hour node in $juneNode -# 2. Store the September hour node in $septNode -# 3. After the existing June 10am, place a CLONE of the Sept appointment -# 4. Before the existing Sept 9am, place a CLONE of the June appointment -# 5. Delete the original June appointment -# 6. Delete the original September appointment -# 7. On the original June 10am node, make it 9am -# 8. On the original September 9am node, make it 10am -########################################################################### -sub switchJuneAndSeptemberAppointments($) - { - my $yearNode = shift; - - #### FIND NODE FOR JUNE 22 9AM APPOINTMENT - my $juneNode = $yearNode->getFirstChild(); - while(defined($juneNode)) - { - last if $juneNode->getName() eq "June"; - $juneNode = $juneNode->getNextSibling(); - } - die "Cannot find month of June\n" unless defined($juneNode); - - $juneNode = $juneNode->getFirstChild(); - while(defined($juneNode)) - { - last if $juneNode->getName() eq "22"; - $juneNode = $juneNode->getNextSibling(); - } - die "Cannot find June 22\n" unless defined($juneNode); - - $juneNode = $juneNode->getFirstChild(); - while(defined($juneNode)) - { - last if $juneNode->getName() eq "9:00-10:00"; - $juneNode = $juneNode->getNextSibling(); - } - die "Cannot find June 22 at 9am\n" unless defined($juneNode); - - #### FIND NODE FOR SEPTEMBER 22 10AM APPOINTMENT - my $septNode = $yearNode->getFirstChild(); - while(defined($septNode)) - { - last if $septNode->getName() eq "September"; - $septNode = $septNode->getNextSibling(); - } - die "Cannot find month of September\n" unless defined($septNode); - - $septNode = $septNode->getFirstChild(); - while(defined($septNode)) - { - last if $septNode->getName() eq "22"; - $septNode = $septNode->getNextSibling(); - } - die "Cannot find September 22\n" unless defined($septNode); - - $septNode = $septNode->getFirstChild(); - while(defined($septNode)) - { - last if $septNode->getName() eq "10:00-11:00"; - $septNode = $septNode->getNextSibling(); - } - die "Cannot find September 22 at 9am\n" unless defined($septNode); - - #### SWITCH THE NODES - my $newJune = $juneNode->getNextSibling()->insertSiblingAfterYou($septNode->clone()); - my $newSept = $septNode->getPrevSibling()->insertSiblingBeforeYou($juneNode->clone()); - $juneNode->deleteSelf(); - $septNode->deleteSelf(); - - #### FIX NAMES OF SURROUNDING CLONES - $newJune->getPrevSibling()->setName("9:00-10:00"); - $newSept->getNextSibling()->setName("10:00-11:00"); - - return; - } - - -########################################################################### -# In the main routine, you carry out or delegate the following tasks -# in order to create an appointment calendar: -# 1. Insert single level 0 and 1 nodes -# 2. Instantiate the Callbacks object -# 3. Insert all month and day nodes -# 4. Insert all hour nodes -# 5. Make appointments -# erroneously switching the june 22 & Sept 22 appointments -# 6. Mark days, months and years containing appointments -# 7. Output the calendar -# 8. Switch back June22 and Sept22 -# 9. Re mark days, months and years -# 10. Output a separator between bad and good calendars -# 11. Re output the calendar -# -########################################################################### -sub main() - { - #### INSERT SINGLE LEVEL 0 AND 1 NODES - my $topNode=Node->new("Calender", "Calender", "Calender"); - my $yearNode=$topNode->insertFirstChild(Node->new("2004", "Year", undef)); - - #### INSTANTIATE THE Callbacks OBJECT - my $callbacks = Callbacks->new(); - - #### INSERT MONTH AND DAY NODES - insertMonthsAndDays($yearNode); - - #### INSERT THE HOURS USING A Walker - my $walker = Walker->new - ( - $topNode, - [\&Callbacks::cbInsertHours, $callbacks] - ); - $walker->walk(); - - - #### MAKE A FEW APPOINTMENTS - #### ACCIDENTALLY SWITCHING SUMMER AND FALL - makeAppointments($yearNode); - - #### MARK DAYS, MONTHS AND YEAR THAT HAVE APPOINTMENTS - #### USING A WALKER WITH ONLY A RETURN CALLBACK - $walker = Walker->new - ( - $topNode, - undef, - [\&Callbacks::cbMakeMarks, $callbacks] - ); - $walker->walk(); - - #### WALK THE NODE TREE, - #### OUTPUTTING THE CALENDER - $walker = Walker->new - ( - $topNode, # start with this node - [\&Callbacks::cbPrintNode, $callbacks] # do this on entry to each node - ); - $walker->walk(); - - #### CORRECT THE MISTAKE - #### SWITCH JUNE 22 AND SEPT 22 - switchJuneAndSeptemberAppointments($yearNode); - - #### RE-MARK DAYS, MONTHS AND YEAR THAT HAVE APPOINTMENTS - #### USING A WALKER WITH ONLY A RETURN CALLBACK - $walker = Walker->new - ( - $topNode, - undef, - [\&Callbacks::cbMakeMarks, $callbacks] - ); - $walker->walk(); - - #### OUTPUT A SEPARATOR BETWEEN ORIGINAL AND CORRECTED CALENDARS - for (my $n=0; $n<5; $n++) - { - print "######################################################\n"; - } - - #### RE-WALK THE NODE TREE, - #### RE-OUTPUTTING THE CALENDER - $walker = Walker->new - ( - $topNode, # start with this node - [\&Callbacks::cbPrintNode, $callbacks] # do this on entry to each node - ); - $walker->walk(); - } - -main(); diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_nodepath.pl b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_nodepath.pl deleted file mode 100755 index 033b1fd..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_nodepath.pl +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (C) 2004 by Steve Litt -# Licensed with the GNU General Public License, Version 2 -# ABSOLUTELY NO WARRANTY, USE AT YOUR OWN RISK -# See http://www.gnu.org/licenses/gpl.txt - -use strict; # prevent hard to find errors - -##################################################################### -# Node.pm is a tool you will probably use in many projects located -# in varying directories. How do you enable those projects to -# include Node.pm? Here are some ways: -# 1. Place Node.pm in the project's directory -# 2. Place Node.pm on Perl's module path -# 3. Run the project as perl -I/path/to/Node project.pl -# 4. Shebang line #!/usr/bin/perl -w -I/path/to/Node -# -# Number 1 can become problematic as the number of apps using Node.pm -# increases. If you have 30 different copies in 30 different directories, -# how do you keep them all up to date. -# -# Number 2 is a much better option. It works. However, which @INC -# directory do you place it in? When you update Perl or your distribution, -# it goes away. -# -# Number 3 is great, except you need to create a shellscript to call -# Perl with your program as an argument. BE SURE not to leave a space -# between the -I and the directory, or that space actually becomes -# part of the directory. -# -# Number 4 is greater, because it doesn't require a shellscript. Once -# again, no space between -I and the directory. In all cases where -# you know what directory will contain Node.pm, number 4 is a great -# alternative. -# -# But what if you don't know in advance what directory -# will contain Node.pm? What if you're writing an application to be -# run at varying locations with varying setups? What if, in addition, -# you don't want the end user messing with the source code to change -# the shebang line? In that case, you can actually place the path -# to Node.pm in a configuration file. It takes several lines of code, -# but it's certainly nice to be able to accommodate the user's -# environment without requiring change to the source code. -# -# This exercise demonstrates how to set the Node.pm location from a -# configuration file. Once again, if you're the sole user it might be -# better to change the shebang line, but if you're distributing -# your program like the autumn leaves, a configuration file is the -# way to go. -# -##################################################################### - - -##################################################################### -# The loadNodeModule() subroutine is a complete substitute for: -# use Node -# -# It includes: -# require Node; -# import Node; -# -# The preceding two calls completely replace a use Node statement, -# and better still, unlike the use statement, they happen at -# runtime instead of compile time. Therefore, this subroutine reads -# the directory from a config file, then executes that directory -# with the proper require and import statements. Obviously, the -# loadNodeModule() subroutine must be executed before any code depending -# on the Node.pm module is executed. -##################################################################### -sub loadNodeModule() - { - #### CHANGE THE FOLLOWING TO CHANGE THE DEFAULT APP FILENAME - my $defaultConfFileName = "./myapp.cfg"; - - #### CHANGE THE FOLLOWING TO CHANGE APP FILENAME ENVIRONMENT VAR - my $envVarName = "MY_APP_CONFIG"; - - my($conffile) = $ENV{$envVarName}; - print $conffile, "\n" if defined $conffile; - $conffile = $defaultConfFileName unless defined($conffile); - print "Using config file $conffile.\n"; - - open CONF, '<' . $conffile or die "FATAL ERROR: Could not open config file $conffile."; - my @lines = ; - close CONF; - - my @nodedirs; - foreach my $line (@lines) - { - chomp $line; - if($line =~ m/^\s*nodedir\s*=\s*([^\s]*)/) - { - my $dir = $1; - if($dir =~ m/(.*)\$HOME(.*)/) - { - $dir = $1 . $ENV{'HOME'} . $2; - } - push @nodedirs, ($dir); - } - } - - if(@nodedirs) - { - unshift @INC, @nodedirs; - } - - require Node; - import Node; - } - -##################################################################### -# The main() routine calls loadNodeModule to include Node.pm, -# and then runs a few lines of code to conclusively prove that -# Node.pm is loaded. It also prints out the @INC array to show that -# directory in which Node.pm resides is now in the @INC path. -# -# Note that in the absense of any change to the environment variable -# defined in loadNodeModule(), the configuration file will be ./myapp.cfg. -##################################################################### -sub main() - { - loadNodeModule(); - my $topNode = Node->new("myname", "mytype", "myvalue"); - print "\n::: "; - print $topNode->getName(), " ::: "; - print $topNode->getType(), " ::: "; - print $topNode->getValue(), " :::\n"; - foreach my $line (@INC) - { - print $line, "\n"; - } - } - -main(); diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_otl2markup.pl b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_otl2markup.pl deleted file mode 100755 index 79d53cb..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_otl2markup.pl +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (C) 2004 by Steve Litt -# Licensed with the GNU General Public License, Version 2 -# ABSOLUTELY NO WARRANTY, USE AT YOUR OWN RISK -# See http://www.gnu.org/licenses/gpl.txt - -##################################################################### -# This exercise demonstrates use of the return callback routine. The -# return callback routine occurs when node navigation returns to a -# node from its children. Therefore, the return callback routine is -# never executed by nodes without children. -# -# An obvious use of the return callback routine is to print end tags -# for nested markup. A node's end tag must follow all markup for all -# the node's children, so the return callback is perfect for that -# purpose. -# -# Because childless nodes never execute the return callback routine, -# in the case of childless nodes this program prints the end tags -# from the entry callback routine. -# -# This program prints the attributes of each Node object. You'll -# immediately note that the "children" attributes you set are printed. -# But you'll also observe that a "_lineno" attribute has been set for -# all nodes except the top one. That attribute was set by the Parser -# object, and corresponds to the line in the parsed outline file. This -# attribute is extremely helpful in printing error messages. -##################################################################### - - -use strict; # prevent hard to find errors - -use Node; # Use Note.pm tool - -package Callbacks; -sub new() - { - my($type) = $_[0]; - my($self) = {}; - bless($self, $type); - $self->{'errors'} = 0; - $self->{'warnings'} = 0; - return($self); - } - -sub getErrors(){return $_[0]->{'errors'};} -sub getWarnings(){return $_[0]->{'warnings'};} - -############################################################## -# cbPrintTag is the entry callback, and is called on first -# entry to each node. It prints the start tag and text. If -# the node is a leaf level node, it also prints the end tag -# on the same line. -############################################################## -sub cbPrintTag() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} - - #### PRINT START TAG AND CONTENT - for(my $n = 0; $n < $level; $n++) {print "\t";} - print ""; - print $checker->getValue() if $checker->hasValue(); - - #### IF THIS IS A LEAF LEVEL ITEM, PRINT THE - #### END TAG IMMEDIATELY. OTHERWISE, THE - #### RETURN CALLBACK WILL TAKE CARE OF THE END TAG. - unless($checker->hasFirstChild()) - { - print ""; - } - - #### PRINT NEWLINE - print "\n"; - } - -############################################################## -# cbPrintEndTag is the return callback, and is called on reentry -# to the node, after all its children have been processed. -# It is not called by leaf level (childless) nodes. The purpose -# of this routine is to print the end tag. -# -# For nodes with children, the end tag must be printed after -# all information for the node's children has been printed, -# in order to preserve proper nesting. -############################################################## -sub cbPrintEndTag() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} - - #### PRINT END TAG FOR PARENT - for(my $n = 0; $n < $level; $n++) {print "\t";} - print ""; - print "\n"; - } - -package Main; - -sub main() - { - #### PARSE FROM FILE README.otl - my $parser = OutlineParser->new(); - $parser->setCommentChar("#"); - $parser->fromFile(); - my $topNode=$parser->parse("README.otl"); - - #### INSTANTIATE THE Callbacks OBJECT - my $callbacks = Callbacks->new(); - - #### WALK THE NODE TREE, - #### OUTPUTTING LEVEL AND TEXT - my $walker = Walker->new - ( - $topNode, # start with this node - [\&Callbacks::cbPrintTag, $callbacks], # do this on entry to each node - [\&Callbacks::cbPrintEndTag, $callbacks]# do this on return from node's children - ); - $walker->walk(); - } - -main(); diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_parse.pl b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_parse.pl deleted file mode 100755 index 8a2380e..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/example_parse.pl +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (C) 2004 by Steve Litt -# Licensed with the GNU General Public License, Version 2 -# ABSOLUTELY NO WARRANTY, USE AT YOUR OWN RISK -# See http://www.gnu.org/licenses/gpl.txt - -use strict; # prevent hard to find errors - -use Node; # Use Node.pm tool - -##################################################################### -# This exercise demonstrates the most elemental use of Node.pm. -# It does nothing more than read README.otl into a Node tree, and -# then print the tree. -# -# Here's the high level logic: -# Set up a Callback object to house the callback routines -# Instantiate and configure a Parser object to parse README.otl -# Instantiate a Walker object to walk the resulting node tree -# Link Callbacks::cbPrintNode() as the Walker's entry callback -# -##################################################################### - -############################################################## -# You need an object to house callback routines. The object can -# be named anything, but it should have facilities to count up -# errors and warnings. Its new() method should always be something -# like what you see below, and there should have getErrors() and -# getWarnings() methods. -# -# The cbPrintNode() method is typical of a simple callback routine. -# All callback routines have exactly three arguments, $self, -# $checker and $level. $self refers to the object containing -# the callback routine, $checker is the node that called this -# callback routine, and $level is the level of that node in the -# hierarchy. Armed with these pieces of information, you can -# perform almost any operation on the current node ($checker). -# -# The callback routines are called by the Parser object during -# parsing. A callback routine can be called upon first entry -# into a node, or it can be called upon reentry into that node -# after processing all that node's children. The latter is -# an excellent way of outputting end tags at the proper time. -############################################################## -package Callbacks; -sub new() - { - my($type) = $_[0]; - my($self) = {}; - bless($self, $type); - $self->{'errors'} = 0; - $self->{'warnings'} = 0; - return($self); - } - -sub getErrors(){return $_[0]->{'errors'};} -sub getWarnings(){return $_[0]->{'warnings'};} - -sub cbPrintNode() - { - my($self, $checker, $level) = @_; - unless (defined($checker)) {return -999;} # don't process undef node - print $level, " ::: "; # print the level - print $checker->getValue(); # print the text of the node - print "\n"; - } - -package Main; - -sub main() - { - #### PARSE FROM FILE README.otl - my $parser = OutlineParser->new(); # instantiate parser - $parser->setCommentChar("#"); # ignore lines starting with # - $parser->fromFile(); # get input from file - my $topNode=$parser->parse("README.otl"); - - #==================================================================== - # The preceding statement parses file README.otl into a node hierarchy - # and assigns the top level node of that hierarchy to $topNode. When - # you run the program you'll notice that the text in $topNode does - # not appear in README.otl, but instead has value - # "Inserted by OutlineParser". - # - # This is a feature, not a bug. In order to accommodate the typical - # case of an outline having several top level items, and yet still - # be able to represent the whole hierarchy as a single top node, - # the OutlineParser object creates a new node with value - # " Inserted by OutlineParser" - # and places all the outline's top level items under that newly - # created node. - # - # If the outline you're working on is guaranteed to have only - # a single top level item, and if you want that to be the top - # level node, you can simply do the following: - # - # $topNode=$topNode->getFirstChild(); - #==================================================================== - - #### INSTANTIATE THE Callbacks OBJECT - my $callbacks = Callbacks->new(); - - #### WALK THE NODE TREE, - #### OUTPUTTING LEVEL AND TEXT - my $walker = Walker->new - ( - $topNode, # start with this node - [\&Callbacks::cbPrintNode, $callbacks] # do this on entry to each node - ); - $walker->walk(); - } - -main(); diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/myapp.cfg b/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/myapp.cfg deleted file mode 100644 index 26f7d89..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/Node/myapp.cfg +++ /dev/null @@ -1,4 +0,0 @@ -#### THIS FILE CONFIGURES example_nodepath.pl. -#### IN ORDER TO USE example_nodepath.pl, -#### CHANGE FOLLOWING PATH TO THE DIRECTORY WHERE YOU PLACED Node.pm #### -nodedir=/path/to/nodemodule diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/fs2otl b/pack/acp/start/vimoutliner/vimoutliner/scripts/fs2otl deleted file mode 100755 index 33ce89e..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/fs2otl +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -echo "$1" -echo "$1" | perl -pe 's/./-/g;' -cd "$1" -find . \ - | sort \ - | perl -pe 's|^\./||; s|[^/]+/|\t|g; s/([^\t])/[_] $1/;' diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2aft.awk b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2aft.awk deleted file mode 100644 index b4ee4a4..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2aft.awk +++ /dev/null @@ -1,284 +0,0 @@ -# *Title: otl2aft -# *Author: Todd Coram (http://maplefish.com/todd) -# *TOC -# -# ~Version 1.3~ -# -# ~This source is hereby placed into the Public Domain.~ -# ~What you do with it is your own business.~ -# ~Just please do no harm.~ -# -#------------------------------------------------------------------------ -# -# * Introduction -# -# Otl2aft converts VimOutliner files into -# [AFT (http://www.maplefish.com/todd/aft.html)] documents. This file -# can be run with nawk, mawk or gawk. -# -# This tool was created upon the request/inspiration of David J Patrick -#(of http://linuxcaffe.ca fame). -# -# You can downloaded the most up to date -# source [here (http://www.maplefish.com/todd/otl2aft.awk)]. -# A PDF version of this file resides -# [here (http://www.maplefish.com/todd/otl2aft.pdf)]. -# -# AEY: Changed all # symbols within regular expressions to \043 -# to avoid problems with # being the comment character. -# -# * Code -# -# In the beginning we want to print out the AFT title and author. -# We expect the otl file to contain two top level headlines. The first -# will be used as the title and the second as the author. -# -# We also print out some control bits and a table of contents placeholder. -# -BEGIN { - VERSION="v1.3 9/04/2009"; - # AEY: Note first line is now for OTL use only; we ignore it here. - getline; # expect title - print "#---SET-CONTROL tableparser=new" - # AEY: Commented out following lines, since this info is now metadata. - #print "*Title: " $0; - #getline; # expect author - #print "*Author: " $0; - #print "\n*TOC\n" -} - -# AEY: > now starts an inline comment. We ignore these. -/^[\t]+>/ { - next; -} - -# AEY: < is now used for metadata. We only act on certain ones. -#/^[\t]+<[ \t]*title:[ \t]*/ { -/^[\t]+| and if we discover a crosshatch |#|, we -# start a list. If we are already in a list, we continue the list. Both -# starting and continuing is handled by [handlelist]. -# -# AEY: Removed this -#/^[\t]+>/ { -# if (!list_level) reset(); -# gsub(/\t/,""); -# sub(/>/, ""); -# -# if (list_level || $0 ~ /[ ]*[\043*]/) { -# handlelist(); -# } -# print $0; next; -#} - -# Scan for |;| or |<| which indicate ''preformatted body text'' and -# ''user-defined preformatted text block'' respectively. Both of these -# are non wrapping but we ignore that (for now). We handle lists just like -# the previous scan action. -# -# AEY: Removed < handling -/^[\t]+;/ { # Handle ";" and "<" (preformated text) - if (!list_level) reset(); - gsub(/\t/,""); - sub(/;/, ""); - - if (list_level || $0 ~ /[ ]*\043/) { # Convert "< #" into numbered lists. - handlelist(); - } - print $0; next; -} - -# Scan for a table. This is tricky. We want to cast the Outliner table -# into the AFT ''new table'' format. AFT tables (especially as rendered -# by LaTeX) really want to have captions/headers. We fake that for now -# by using a |-| place holder. This should be fixed! -# -/^[\t]+\|/ { - if (!in_table) reset(); - in_table = 1 - gsub(/\t/,""); - if ($1 ~ /\|\|/) { - print "\t! _ !"; - print "\t!----------!" - } - gsub(/\|\|/,"!"); - gsub(/\|/,"!"); - print "\t"$0 - print "\t!----------!" - next; -} - -# The default scan matches anything not matching the above scan. We simply -# go through and set the known indent level based on the number of tabs -# seen. -# -{ match($0,/^[\t]+/); indent = RLENGTH; if (indent == -1) indent = 0; } - -# Given the iden level set by the default scan (above), we now determine -# what type of AFT output to do. -# -# Indent levels lower than 7 are represented directly -# using AFT sections. -# -# AEY: Added $0 = "*"$0; back in to ensure top-level headings remain headings! -# (This existed in earlier versions, but not in version 1.3.) -#indent < 7 { gsub(/\t/,"*"); print "";} -indent < 7 { gsub(/\t/,"*"); $0 = "*"$0; print "";} - -# Indent levels greater than 6 are represented by AFT bullet lists. -# This is done by first killing some tabs (we don't want to start off -# nesting too deeply), and using the remaining tabs to adjust to the -# appropriate list nesting level. -# -indent > 6 { - gsub(/\t\t\t/, ""); - match($0,/^[\t]+/); - remtabs = substr($0,RSTART,RLENGTH); - text = substr($0,RSTART+RLENGTH); - $0 = remtabs"* "text; - print ""; -} - -# After adjusting indentation, just print out the line. -# -{ print $0 } - -# **handlelist -# Look at the indentation and produce lists accordingly. -# -function handlelist() { - if (!list_level) { - list_indent = length(indent) + 1; - } - list_level = list_indent - length(indent); - - if ($0 ~ /[ ]*\043/) { # Convert " #" into numbered lists. - for (i=0; i < list_level; i++) - printf("\t"); - gsub(/[ ]*\\043/,"#."); - } else if ($0 ~ /[ ]*\*/) { # Convert " *" into bullet lists. - for (i=0; i < list_level; i++) - printf("\t"); - gsub(/[ ]*\*/,"*"); - } else if (list_level) { - for (i=0; i < list_level; i++) - printf("\t"); - } -} - -# **reset -# Reset various parameters to get us out of various modes. -# -function reset() { - if (list_level) { - print " "; - list_level = 0; - } - if (in_table) { - print "\t!----------!\n" - in_table = 0; - } -} - -# AEY: "Trim" function, added for sanity's sake. -function trim(str) { - sub(/^[ \t]*/,"",str); - sub(/[ \t]*$/,"",str); - return str; -} - -# AEY: Get everything to left of specified regex, and trim it too. -function leftpart(str,regex) { - if (match(str,regex)) { - return trim(substr(str,1,RSTART-1)); - } else { - return ""; - } -} - -# AEY: Get everything to right of specified regex, and trim it too. -function rightpart(str,regex) { - if (match(str,regex)) { - return trim(substr(str,RSTART+RLENGTH)); - } else { - return ""; - } -} - -# That's all folks! diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2aft.pdf b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2aft.pdf deleted file mode 100644 index 8164a6b6c985fe485d54720b7a82e082f274458f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82163 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 $;ob6S3pKt&$-%*%Z&D$3#M zO~h3SaNDpSmq)Ui(lgIKT!a@+loloSa)A_y%U7P!g!p*eI!e#pvM~P3gIbSq$E-=} zz|bkLU?7`PRyd%w#LUDu4Y@emUWY>vpnzyJ+|8hnmK2=Q5=#=1jZk_+0HPlvz7#|4;?#WqcvLRG~ z_>;V=wO57l`fM=t6!9)7#<1nlc4nj3@l1eaaTSp+yp)WprakM(Tt!Tz6y{Or)r#7i}AYksF*|QjgKOaO!wXx|mF4gAXZk`f4>{7gWWA?gS z)Ar4ve~IY6gfX=k1O)nw3mniDO=2_NRy>5{l}d6` zfX3qc%$0oJjbrh0cDWo1rF$SWu#JOXZtbAzAn9jKHNl^#3UO?heqEbKN_LC!^B08f zW;gOfI$MT*Eg5r}8#|vUE;({?&FOfek?2rG{yw*&=d|5GhOIaZ^mW^FePmIXz?Eq^ zBxk%oQPHSmIX4@!nb0f*EzZ*o3|ijE}aBB!Cga zxLTF&3#c*!Efq~sa=sgs7>QdGg6l{~J#_)#C6PO7NM2W%;T>)}?epW=l^VAlz*j#r{RP1hhX1+h^;AP7Ta+qE@ zUio=RawT_XejdT48N`S`BMpz1Vm~+iWm>NuLb0(+_FjT+PEvBeuNr}-!7d)UL!@+; zsT~bouAh4;7>5jtifnh3 z>2yw8YB)KY-u2ORYYAM7Pb$!DGtm_nW=+^YzimIg7M)%vZ9L-)xobzID#b3%Wx36} zkgoJxPy7q|mzS*f?)IZkb!6OuzUy?5o1C9tBRJOL=vxvSy@>nd3$vacBX={dHq#t> zz+-k{;82yFcB+{4q?c!FMd3a0L9?@{cu0P$t)3ARvHrG@#LV`2j~urRB`CI-lbX!f zV7C#D-GG_s##Qj%XQxa5T)uS30IlU(aWtJ%(inv5#(_Eyg+OU8YA|KKKpC`wuf5aZ zMV@{j?Uhjn`f0{w)^mAicVri>f@V)|8lQ%xzGs{%_|ZLksRUMDvTEYtI2}cd>b%pX zn7zo4c0|X-x>xKmHxa}36AtL;_w2!WOwSAvQk$$#?_tw4!B4#Jw@g6NULkwzb^~rK z^JBACWkl{XMH@Yvo#upGhv!_?F;m?HInNnTmi`OH8i3Xcy-L&leV4^13{~q-a%Ryh z{qepNyC;4Uw_F-L{-cD^yR-1o^0&STgos>O9p2Q?D2`Z&ny5s|&_o)L5M?l2(zSt$ z=ceN1p2pxMlmg|r!JT(Jt6+mS7oOTNq3ZM z9${l|2FbVlc=^mj5mV$WGtP0C7@yq7Ql{Bd{E~3<#tiY@{wyvobLe&I8oCmT-hQPt z3w~#c-7gd@1>NbjIbpP-K`3dpqN$pEN2qtPcFP`}{<;?+)E7H`*n@;>MoqjbQ&+Ud zD&x^9!%^OpfY!3s+~s49ZF|Nml|XHlAA&xbuGliHu}nd*BZ??~;G zp}X70GKkD;%&abx{4}pP#NzYhQhs=8@^s6_pT`5;*B!Z6yQ`Uw&-BC&PP2I88Q{hL zOZe-)noCtNGFGr)UkxnRH^82*WFy~Ert%ZFihRv+@jXUuB}~#Tt}olmRQfM@odfN6 zBIGX$Da?G^tP}!rHW8STNDA&Enk$n1{ZNh0#gz;5jo;a<J6nrLq zL~m93qmS))@aIaeDp4}&L-$!~!TRkUd)6w*N+q<2C2@M>Sbq`KEO6T0FlFVj4r=x$ zQ0l#lMX=Ky7@i_lY(1elRVD!*=$qRE&l)i}YEYq9wo1$T+B*?n#tnpNP1+ST6Qfj6 zq1dv0h4++Gey&+rejVijIRb-Au9)W*I(x%*M~JXAM^ITn#`n!t7FW4?oe{J$`o(R1 z&K@L$rPmePu>zMbMa}(IQhY~tHf{Z6nb`sp_;Gd~Oe_pS2Uga?e>=!aVo&hIfWNy8 z{r_geW4!_A<%ZAKK7AS>*sbfkFeAw4>S@3uL$>cr9G)2w*V`#DX!%&$W^2DIO{2zi z>6!L3FjK<3!zEO;kq2_UG*lHxLHRb#boy!JSI!e4=rb%nNPzGK>@QW_uXQi2vLE1;raNvh0$Idm-sL+v@TmC^#9Y8Zx%Sav4 zxY|DE-O=iWAd%4}Z|@S2#)i}}IOm)l{H3-Y=8eyT=Wt?j9WO+6$UyR3!Arn%BeTdR z_cHxPFWS<$O3-qmyc>TKv6Q6j(;g{@XMooog(Le^&{)5l8ytCZa8d%MoBMQO;7MCe zH>h1RB_Bd?=-}E&u7ve4Ff-k0P9o6@Or&Lk^!e>7nstBJCnp!~ zdQP(uy-`>IejVy$(zik4_GP909@34+tT78IMD| z9hBu@5xK3n(1YB z%b{HrLg-ANXs>$^BGS|`c)Rt=<+)SJ24U6=E;o|i(nJ&=RG%4kD@uQw0K=yA(X#7Q z^7>A({AWw_sZ1M*Kv36l{W4a2P=r`Jd8%88PO%FwYs{SKPpxELr~1gm^+n1 zI1cn-2hQ=`mO})}wJ2Me{oJXA1655a9mE63C3z*7l z$x#%*?E?X;=BcYKA@Vejr!qG2w8>Y$F&?>pH?GnqLc-VxW1MMwI;d71wTC;_?6Wk` zt{d=Ajv(d0e%8Kko-{jLx+m~Xb~Sj5?;QYSaN)yj6DcX zmyb>0gNbx(4BcHm)e9Fal2XBI8DMKRgB^Y$I6jKbJ@$QNsncwhe>Q}SmJeDekQ=LWZC@r`UaPt-^4hPo z6uw-T^5Z>M(J$mk%)*#;{_fnEoy|I$=y7naer|qW*j(~VB&+%{utKzb{K-5%$atWHT$z^}1w`{L{VLjAeT;IiI%9{Ag z#XV9g=xCS64|ry?i;_&mtBF+K)G5FzY?Ki*28}|O+O%{<;w>E7!UGTKPleTziU}I* z@60A=C5)+R`ZCfll_$>BCpW`FtoQ5OAl)M#=$Fw75^%ZK&`9Xcw8EvfJ1#;R5v)_F zxYVn53QA$nHZ&dwW{(gP-LdJfUkW+nxILMA`u4$j!z|v@?^fX&mahZE>{6tbvhm9;**a}LpbWfEqQ6{gSyQUy6(PKUOx6b*li~>St9mRDop!NJKn{} zo8n{~sp*E3y4~BSqd<6p0DeYwlwoN5^Dk@EP10_1ypGba1V@*z^UL9GiA0?!tRQY?A|7!sT~X8>FN|u9p)}mr|%zN z@Hu^bQ+2+>ahGYcftOS0{{S34r@H~6`+={xDMmBOX>R|(>5(KtlxMbs@dnPY&Faj& zCP$#1WEzQ&)2WX$(nP{tE%5+*jkOGgH|P<#m|g0OtL=>l{!v+hE#VY|>@s~Q6~>@~ z_MB9;NfuMiWUfLcZfPOww{QEXJ2Wsnnw~3Se2~ktLKkG_#55`WiNo$%_Em@CO zty4)c>9F)#-?)@(AM|%+ zK<@ZM50LBlR0$h{XekH|oELy)fp6CSwHbdm2t&5_mX&JY6C2mB;={?vYni57M&J+T zuOe!-Ce;RqvMKE?eJQYh$qwCz6gxvW)5>p($7E~c-S>WuJY}u_qxgf$#8{*!9gwia z6BaIPujzlPkRvdq0e{d~&#Q`ga8Hk#Tnsd}X^Xi$V?1WPV zgL9_hr{fIh_$|Tc^0=|auO}so){)0^(EF)I{UWI5MCe(R)jv4_#pYUv2z!5ys1t6} zkSqsT=zjgs3hpUfHD~0@1aK_fAsE!#Vo9Xi&Lfe9`U>!wVwLT?t%9R6zjtN+McIVo zPsjCPcwCUHNbwXu*gRYtbLIOJ0FDd>`ksB5M|Zblqf zO0frLkG;a+)y*vLp5FGB7kjOaP6dbTUKyU`sv&`ma`FYvF#QHe?Ctx`lRrm}&k_D3 z`l-$VYoG)MU7CP!F@=iz#svJ!9dzA>p>eQk(=29Sn)i=x;Zuc*`&3;Fim;)zs_;yD zbw}4&Ohh5aUe{}SrdNrb)vEs<1`Ky17`9J+0GwA{j(MiLwqzW}XMp~om6KAR;easLqefc_v*&q`?WCo~=C}Kc z9ZJTZY9nGkEU?@5G_DzOUB_xJCogOHBh8*6*9p`Gs_$H9tc|gfCwAT#n}CV0oM2D3 zIsK*xY$gdYgXcq*8d~1P(<#tSLV*Bvb~mh`9tNZ0Q7!ni)Z9hnq|A}ViJ8SU z)cMG!WVsYa`O(6rnp#F5b#)=Z49&+RRW%GQlA==3T7>mb41%X_PjURQV1h~5Rra9YdNL&o@v&Pc^@u_DOU+V1Tr=LDX!Kk9mY9d;S@2A=ar zLaOl}U|u_G(QUk~6`^)2)=kTz#GdTlvVV}n#u6kRWVjH1$tZrEO{b^Nh8k?WLsDFk z*Pj;3uVF{6hBiLW+^#F`rhR!?k+&dYg9ZM z)>HdKQ#|P}$cZ0goYWe#yw$t?I=JyVuhzJ`@g1s)4En9rTqr1AbIM8ZB&xTdq6}5f z5jD9{Ga;MY*Vna)ws@vb?r>#BuA7@SxOM>5O=V?+_*d?QNk;S$fs8~3gQ@0Pfby~zG^xwiv@!?>bbr%MWie*s>nByY$Y}5d<+E4Hpsm5dKwp;mRW1ahoJ&CGj#d4eWbq=U zGgKO(X@S=gQEO*p`~y{|nsIL%B_|RXdB_Z8YpLHgkz)*w+{BN_cm@vh^oV*zWlii^{jq$Bvog16X(5BD~dQ8(IxF|MoM_)NalqrAW$qKV4nI8hmry zN#9e3LvK$GG7S7KHg~Gr8^I62(Qm_EijQGGYOCAQzf(}bEh2(UYX%fM_UjXz%_zAM z0LPU`qbzHMz+v*vok@%OY?=B(jVNtQ)u8DtpJrzxwq5HTIsMiW)?wqnj{XqmpWV?* zvY2Xh&ud`YH8v6sAn$SPnI925RiCjkag?j=NI&yRmW`dE`-f=3fr9g{G4EMJdMmKd z4U7qHwvO@)Pvyx;{#L5Jvk$Pp!q4M+g}YC`Qn!e4&}9k+8fkGj;7vsEimB(P2|ysW zM#Yc+EJU%y%pWJp@s;A;40RDphL=wC06fpFos=>orH+|V>u@hYpJrp^6DUqNOW+<== zZvIT#D8h5Rhf&xV6Z+7#_^drLNj#W~Q!+ZiW8oyD=QkNpK=@i_e%)Q~A6DBAb3f;M z`zB$vSW{lYoZVsUu^b*BN>p(;zGmAx=Qu%C)UHyK$@4g^SndLD8aHZifLct27%oYd zaaj6$hy0|H_slpVLGBv7757gMrj zGMkM!4D1*7V~pmvn%gnI;H=%H9T0cN8u|axIaxP8S7dq0FXQ8mn%oxLj8XE&N@K6=!am8_8*V6~9 zX=QiXf{=cwUMho%L=K`BbRHAG3!=*uYUVRcVMi7+LXx}tH=1`KP0#Z?S_JZxTbKnF zFePxfE3x(PHx7Ix^y0^#Y~4HzyQKaQzHL*WN@q~C$=PHeXTt=Zu0Ip5Gh3GA6IIP5 zXlW7`5vlHIECKhSahl7oGo1yQIZ)I-*0l}U+_4)|tL46Kh60PoWDy*J;v*Af@N0o73D#O> z*(ltO#GSP5g<^IkMhMY6&?-h%TTX6ea*}KwMX!i1J0+4{dU8}+BjI|%xd?H09sNk_ z;4d<^QH4c%Ns5Jh_EXXpw*F=8)b5||%QosMx^~0p6v~L!9o*^mlunBWV`Asr-(%6NV$eiHaG?E=trT&!vCh4OR1L zU-Xt|WvQxINDKvlVbeNh-g@Y6p&mw@rxqI$iCWW?FH&{;>T7>!39?0E{xr;&$ZLZB zF>cJqxN~o3!>23A`I~(y!!LTDqzv$B%$j?P_=x&oIG6nz9Su7~Y!fhYZPr5V4z}Bo z88^4KzLxO1q*ZoiR2-B(XS2`Nf>^zAX@Rm9OqL}9QP49_Szf@f!H!v8tQ@7G39NmO zT0hGsisCE`aPcw_@U^-{#C=~DVx*B>-rd|jG7ilSo6=n(gN0VGSmxMQ*{0B3(7iW$ zB|jHsM%N4WtT~kpkZ=a*3br0~TE+3usC%EWCCfpE+)6pqnQ^)4XWT~Vw(Xh2y6+m| zA+lkB99**+;?G4eJ@zg8N=ObLlBzsdTy#7*t`#bf0H{Q@!Pw&WIFN)&5g$jlr5S%U zgPxRP59yIUGFq(MdmOP$hv@p|*_cK085xlLOQfqOWTpCz{MD&=W}KqYQOkQ2{n{G za-QwAs_9XB>@$(5X?w&ns`sjqLY$w6lp@au{#gdk>#s@{jTe6Vr31HF&tZiEQ9}sM z+rb^6sjF8T1qEl|nd(yl93{m%61P+B>)FmD{*+>$yK^1G=hA7Mb6ZDG*%i&~2Qg~{ z`ioT`UH~@e8S^8zTAdi<%L@%Cmym9AI6+6XGcUPA5(B9MWos;4Z`b)7A)YN!?f=12 z{`Icc|724&WTgZ&WT}N@6#pxg@(-5!&#EkXdJX~(R*wJ1rvA4q<=?BaSpSu#{%4dT z01yNS14IC#05O0BKoTGgkORmA6ah*AWq>L`4WJIt02lxa0Y(5LJ8L^zfRUYzjlutJ z)-rK7vNo^*m;y{q0j3rJQwvuUfT^8}Bftz`4lwtyH#e~bSO6>mRsd^&&3}MbfW3jE ziLJGXsq;Ud9RE@J^=}T=0pQ?b=WO!NcmF`KPA0ALuc{s*REVq^SwLHn0*v5guG{*>JP=QXPLOwM_K8K?&tX z`R3u#d-mhzrSqq~_9ELU=YscSGw>5)WWQ3p3l}DKG+~Gk2@#xMW)_MFoS%dQ6C8XA ziUJHeX0(D>oB|w(2!H^rtb+?oDFFnc6rZXTAIt~?V(D%s2eN*L292nS{FXriTW+WT z*2Dt>c}ghWDz6?H$^!z5ad0(Hkyr+nAK4Ei%10gU|2s0AsI4F#DH;*VUw9)4h%1>G zYZU6+LLBzQAJW)wQC#h$SJ0LMB*72{u{0e8m;x=q9cKiYzYqtb|J_{@fHFM(6IS6D zHK@aY;RE(u_Bl)VC5I6pV#NKE-q##8^@=0wg_Ro1qK;tO!Jo|(IzX4DnKfgPp zB3)2mzCRln|3N$j0??5F16*p~o*fw?DQCr+IKQdKMf$kxuHK`!Aml{^D?(eEE?@8ED1sS4J&)l7>i#0q=E~dqN4}e4MHZ@G9CDF9@1QItaCTd zJnxe8cP`%5)El~3K8}w8Ps@fsCe$-SgsZ=_XXnPM4QP(h_I-y`6fk?jo5Bt&&u_fm zBJ@*q&(Z`F9NGj*hRngFi|#)U3T9r)d?peYvS3}oGYP9{@-#hqRuG5{{X9YDK^OEZJ!k1ZyKwY&Q1`3X?tlzrN)LFu7X#+i? zzZJ64u)jYKqYrH(K8(4?-oGP;0*79c_Ns4wZF{3Tse5!OFHhSugwgGH=a@z|9r^$5 zv<~vkB-e24SO^QAwJ56|*tCCc!K#jFz5hbPIl`ZRMSoMy$OByRl{C_DBFX1P7U{TH z?_%~2u_M;V;1Yk(>yura+uT)lY8OoYhO^;49)AAw#S9EVd~9gy=2pSQ`vlJ=6A`w- zMUQwm=Cavj=JsZ*=l$C)qLM;PoQ$@V{@&SG7yj6V?c+Q=nkq4Yn{hYz=%6C}R?;q2 zcF)^UG`RXC)`1hOPwZrf32a=Uf?n9lx|&L!XL#OO*IZZ}6a3lq<^ z-uqnkBsKT@;MUEH`gLN3E7BhZm*2pAfln4Vvff)>FRoAz+FB+j(ak|+8P{%uC07&t z)DI2;SGFV__{;k`IyvBz8g@D1L^inM5C^$n#&MY#F3o^4o)kgVyUG%Ft0FB)z z5-~?S?|AmCW0AqT%gADRk;!l)Md^FYI)Fw#byay}W#0g?^97{kUA+1nK_frn>I(-^ zs?^0@B(JbPSiw+>9E(ZMMjxe)R`Y#Z!R4sYswCmiq*(F*>hfq*mSr$)HXs*45AB_tQ@n#;k3ofEn06h@ zre(-kR0^d=ru}}N15&Uf(zGzs}0L!TY&_1 zb`g83I+>hntP=O2K*JrDcOhZ!9 zgjA9%EM50B7Y$xO3h5kGnfuO`xE05MbWkrIO2r6xAegHEt}^A!muc*dht4ce(n{4` z)R;s*E#15=&yV<(NO{#MK6$4jN_z|G?iMdOAaSv+>#C_Co<_~-EvndiqdD^>O#S4uH+$_q;)mFIICSv#QV{f)4F(Wr z_U`i68{VMUyz`EyduFusBsl_ey`uhCHIR@tk^Xahgd90$)o~S$x zG%-5$lub(de$n2CrH;hq$)Blw*ve;>U2+9V0a3(fIOOWpAj-PTV;*YNOx4NMa+D*= z%}lVTuIx6amXo$tv&k$t`7gnGu`2wNCvgG0$DE6PXsq$(Ea}H7^|Gdv9_*{+QZe4n z=w6eJ;i)N&{fWy#!A5Go>n_$@{9Hnfiny7|sLy3jQ2wV(qvHD7Kvgksn+ML_xH4Lb zWDjlA**OMQU+qLGtQ7Po0QS-ajk z-;H~mJk}$~Zt?Gv1E&r6DMo^#oyV0BBf4qhwqZ>16>UPM?MpKpkLHOxt?1*m^0l_3 zX)c1@sY)qR8g_88l%Bzq7_vF`s+;=s6jTOWOI@4N9e(Mya=HzqvJGFWQ*4G)ak8vF zh8~P5p(pyA+v>Jn^uwz!Ak~rigIppBGE?;T@JHGaBZzqEa+{VIEc5#M$-#8+t%jEO z^5{(4oW4ly^N5LA9{BP6GnJ+mZuyRzF;^3oWH0hC5@xEW%_(|#qx3@i@jMCU_(fJ5 z6WqAosifYL`hqcBqlG({G63^lqi_^m5^2w0y!GY`5SJM~m_&|sIqEA3_qGvK5`g`* zx$9?Ya@CHQ>%>;db+7@>`Z#SC$qv|jWoDmVQm8$umcZ@rc!I6A;iVx^OPA~nb^3eH z*LQ9Ob_ci1*K5?YP`OpI(ko5SVEg5HxRWjG>?}@)V^Irri=M$^Jru#pdBk$i*D@v7 z(y=>5SQVPwp%{O<#KGBwd8MzX6=^;Rzt%fQ)el|!(pghRx~ScgE$b2}r7eIp7i(DW!=)$Sk{M^Cd=&n9l(N2vXvQ-NEeFmH7jjaP zaaqW#q!Te|+rbBd|E;Xt0*r>WGmV(PHKeD8JXq#Evy)thScOTs(?$F}x9369u6dK) zHueVhR26NBJmtlk4bm(h^vkGQO)*1^S8Wp@_vTzg63;0KZ7Ig(?7Ht>ZfH__{hhWj z>4kg@;FPhqS9rHg&2iONTiA7SMwmx8qkur2yz=fFHp1KsoYi(kZs*cn*^K(IU9RX^ zdY^&P&S>9!8M#^qMN2WoQ=Kjyo0AzzMrG)7nEA;`T;QGU&Z(Jj1dWd0MCEk-%g)tc z>yo*AwQ**=-#gZ@&-1C>;As{DENnaEFv_lKe)% z!T6rv`{F#C!bz8jS*~kxZ@L6yzJuMSy&0g{e6=L3YuiASyZEcB=bb%uy#VAv}Bg^et7VdNzh$h0! zLPRM;9S8|`??mPTgurj=pE;f(6l+ti9fmbukK>+hhEvUwKSTp53MK>}47>?jYG1A9 zxfHoW$30h{<`_XNOKJ}%w!T2`A5|(~kESmb*f3 zjAA@iZJTRU{dQr$`ZGptm511d+NU0e6qbYx?3(Nvn1$y&{1}fl6E63ds%G7dq(*eA z)iRJu@biaBlM0mSUo+SgwT(AHms=fdxv#FlZi2|WySBnx;&Sr`p1}jqIJQzU(bS$v zXjZnbV)>jr?}Jktd1!rH%XiDb6ud^tNVRyUX2>qFb-Xn0;@_nc?oZRRoW63IvL%C0 zlmjf{?kTh5na))X){-kL1^BxO=ed(+3-jjf!aeqGgpa1jy9A_=N&!!*>OqZiP+lKI0B-gXh`c=%VmjIZg{c~ZAe3KC^saKmo2ceM;FCy6y0f?3HP zAQz`n5USByL^xu1qJ2$CX)pTmx;D?e7*0~EuLicQ1O~;+a0Xt4D~%Ez5^|9!m9GKc zRh?t1dcJYvjy)xsZ)1skr*9e5vw*N5|mv8_iS>+5?NiPBZpKGjI$O)|E~18Ws+-J z!!#Xjz?Or|$3&r46TJ{EdcY>)!e~9V$zoHfe|mm4?8fo3H#t?h@(!U>wqg|;mk}U~ zE=q9e*bdC+#w$t4pi=|o4Ouj`!SVAx&zI)$k4&m`Ky9&k7#rbpj@ZQUd128c^G+i= zH}0bAOKF3cPZ_@>w0;urK5lW~S%s~WfD@E7hUh#K12jhI!ic1NXvGKaf>K0l0f?qa`TpP-%Hetx}lr&V|99?-heQR z8uw{L?W^87u_LBXPaq6j@NqDx0I_L4Rr-N7_84oTYN<|?Ox}5FGmIThiINz0WMwh~ zgGKk)E_vWeiv~Y2y|giR><%~alP3UmI=fIW`1ri9+uS!ASKC8!urGjlbCjak=~sZ( z8flReWrMA?*i9-oXdSL0%(chnvaaXN0iu9;7H6TTyKtUrI)S(dKdo1jPe$3gc!xKQ z4>$RL(=v|#r%e!_n;Yu?mzK#Ys;R1r{+*Wn2ay{S^WR_@13m})|B=GwpRA1KKMGug z{!YdIPQ(5|!EESkEo@Eb?CAaj*!nN)yr+qy-M?|FzhS9=Rl9NgRf!)v!#}_jBR&Hg z^FItQ|B9&?ndtu)YBvw=WUF7Yh%)8^QORnGsp%eJm{KM?!#%_eaT#f%2R>8j2B8#` zijfVZiwF*vvVtfDijW-X@uK8XEu6*42Zz6&T&CYRe|&pS@=iKxFWU1i+_qX11A`hn z5Hat9CK1yM;4J+;{UfT8%V7PnFp?7!A#n&9$sw#IjrlzR$||9OL?;0Nq5%23a!X=y zRiTSP(((UTbCT>r0L!x~XrNgDiwYp*2om=D(02PRSM=BY?2@0B!OCIAlkw0Go7LZS+5dE7Oa^Pl< z2ESIi#)dj)xli5++jM|<04Dg_A3qlzG{1q}9rbv)oPHo~dMpeWas;U9xU3a9zl=Y` z!O{Vs&;bL$!kjsyqL8dY{`UMJ5c2wrgFyJHee{~Zq8Nc>{`g5o{(ORBG;vDw$jlDy zkFWt4)c(&u;ERB>i@gQSvD~lkD^*{wRXmGR3 z^E}UdoJdKsVfw?ZGRVg7z#mE=$o}|f!h%nHLgF8Vz;r5kwA{9-8ydugl*ZWdPIEO4 z^_{*~E5gRE%9w!*dwkFtz_ot3m$qSf<7aR{Z_5* z-7|G2abP#ud@Rk^t}Zj1%(A0BR<{xc<9l7;YTM1yN9^QTxY+1E1$BjEM31IQrp&q< zQ`|x4NWYwnT1x^K-kmk~Fss#lSKpI~4ZatYMu3fmY|CLkV>bM^ODRSxN*fSJ}$nEJcCfY7l1iY z4K2)d@km6bCXelX_ROz6gMK#;O?bJ57}aKkxRH*?Xr8ZDzt(w}x7cvqOq1lV*(q

jfsatA=RBD2MUY*qA8;Od-dklcuYh5ncKJFbD>}+uNUyr%+OAWV*PC^m z=bVK3w#=F0gJszn>rCi$VR>j3{S1fq+e^8Wu6^fM)+|BB8H-qRS6-yh3G-3!&7!>I z+Ke_>D*TBhQTNkD-XJ7V9k{#Bgg{2y8fb43W9j2n=6Q@Cpd-3xZn3|!Tq*1{(RJi9 zT;_y_h)XB7d<=`FuT)Bc?sL&anMK*302RKs4-nH;%AY zSdz_Y8`_4-A~rSN&!yrbYaZNgQ^t7fLm$pq`%h9M}kXg zBvwP)Vf|zmy}nA1bGuwyD0^ajE^JSon(fDC>+4$r^0WC2T(^(KI9o39;Y^>2-E0@D z*Kj|J=|bmPEW9cy$@-WbZJeTC<-5z2H+Pw)B5-6+_dR!xx>8KcYQDsAHutj|E?XT* zFtUAmBI~vxEQD@y6qi!u{klBgxt6_0zkuq;QvO{)Lt%9=bl?Ci&+XiPp=^?dRO$1F<23N3P;t??vD= z82Kdh_}%sFRqW(R(Z~JzbCSFc%lC<2E`*dK%fX{nEB|h6D#8W z?&{(sQjLcc7yrN(f~9G2GJUy8PS&TR*Tu{su9!q>zJ1{_ig$XcWp4?R1huQG;Akihwd3*w*tsCTL8$qRveKjIP@9IS({>;`R5zi_;jF+; zQL*MHdNIcci-kpH1`pi5%CsXp!P|-IrjXjRl36smUev42RM+9`xy)Jy$HHETtoalU z2%ko6R3q(TGH*LBn%)w=3)T99nz`PwvBx|mRceaw6+#$d^BVcNwR()@-Q_h~t(IZ> zpW*IGD$N<0PuK48-?tYGNqi%AQ-{L`@FzjGV6;ADTMpY@IlLQr*!5|Co|rE+u0cLI zR$?3R*TZFjq_BcgOH{ORoKvztMzY3I=XhbwSJe}ZYLaA^uOuEMz3noXHh4N#ST6a- z+!pr{rSr_L_6x?Q%IeCXQ3u0!ODE%x_Wc5%H4&_u&gYdzns(x9Gdp+{M3ShZym&3n z)Jz+@U~rwfP6Yai5yxGcIf_?fkV0>=pO0zJqTii{*rVeFOdP47qyyiNVwMo_LZ>WO z+`O8;0B7n;Si;3*t!U6pGg9gjk))L?o$Bf@$7=5P#F_F_`d6o+Dm9DUIY~HMN})Vp z53bN+W1x0BT#B7Zop0GJ{%X&`5PA!+^P9%3n#D`DimT1_lD_O|6sT-tQS4WzyMwuVE(q=Jz$toaIE3A5Zo^>sV+y-)`p zV{Ux%eQS@4gXt_%MXSaXZDDEO;D_SfnExV+{%=~2#6+Z|#TEaaMcMvZD$MkEsW3f0 z2Qv#k8}t8sZ_Dx@Dvnr~{xyrz|Eo;UfX5PM^79kP9%~iSR7~Fd6@Rt zd7BPPGiymG-6z*2$|ut3wB#m^S34_EO3(&5tVvpmrBz#}QLM+cY?(dX@Sfy7e01M< z%y?}-G%~_NHk#Sb!XhAx2tT7B4WYV&hSCC}AZ6&A9EAu_BSsT$QzITik<-$m^dUU> z6Jg4q)+nQ^k!6E)$rr!`c{mX2A2gdMAHrY&K?JQ)gMc&$JH!L5=r_LN!=8A(9$P)%j;KN1m7XZLbq6NSrz>7k_75RQ5&_ZSRws08kv55m2M6^-p2W4r4 z*hgWb>`efG?;~Lc%74;AxZV4uW6@2cJiG}||0(0nopU3X0(da-J1FBPM-#w+5avJ# zjV=}C*Q*8<#8#)qhLzs3)cDFV{ z!wwu!`(OmV9QJjBfin0LZk{6j8h1+WR#oz;b+D#iha#LHVay0hwtulf>$$1I3-Rly z4}uqtnN!~YLrS#o1gO>=KLbcV7+3<3c<75W9zi)6573=B3jloxq9{+I6cBvaJnHrf znwv+#qJbv`?h?nMjdU#oCfnjr=7*qR2m_3uuzs)4=~dOqfSUy(QP5h@jBDI=1Fg5# z&?{rJ^zhrkMvF#nJ7hB7NlnwTq}26tY5&KO3;$2ci}mkg;hyg*z$?JU-!r5UXG;`( ztc-d#5~Gt=zcAwm;STM(jFH|*`Q)F4&F^?!>|IqvE@quFRd0i~xlA~$VmHY@i+tk6gf8=5mNK-ahR`*4ILmALO^Xf*WvTBXfzjva7~;WXkW|L#9Qz zmaLjIt4b;6IFfl9Y)@anaTUNoZ63`Jb+Z_2bo%0quEuYhofs#`*L-#rkIbgZfx?bn z%2A=29^zGB0^gUdAXXt|1=R}x7n)J|-f z%VyQ4dV0R?Aw!shG&s34ybLuZ57W|CO3ihgBOqlWNxfAo=4UV!DLM>FF1q42A=Ni9 z46L!UxO{B=#AQ9BGgpOjs=+kkEnDl?sxxAw3~|zSB)zKV4t04vHX9|?m-I_DdWKsi z5ltdRXWV~rg&h9;DHD;BE3t0pt}QGEYum9_)=Fa}yFA|`)$)56pFiW$QCe*ts8>S& z-k;COy_6daZ+?Dj)>x|B8-yn@&Y1{+}@H9#XWJ)MXp#cbqTeQ)uc+*QZc zGWZ7g>sWW~KoTa@sOd?1uoVuAY+23?kM)*HeYQF8IJHSiP{ZL&R5DnxL{kwr*NO7F zc!p^^YEpS0Q{iVLx${X|2YKkgp4I4Vyd-|7>IU58N`i)XvDg@nnm6gaCiGN;jxDOOO)1=%x zmQ%H&<)N#1v*^je^hjp5V4X(Wo@EekK@V8GOhTwyo?5r@_t8lw!mVyiVbehsxf?1L ziF7A3uaBNe1MaIUv$)l(PACeDH~Pq$X@5|Y03I$0opM3 z;)AP?@!OIdr}+1&X}ASW-79~gsg?Ix>ndiUL>SAJfl{{AY0kRh0#W7Yr!xr3+3q<% z!1xBxt-lz~{~P7MoQkTrsMOzvGy8v-&8+`*RK-UBf8zT62Pk4={nz3AZ>C>?e;dgE zUE#|KG@9^8vsc(jg2>(m;^e80s_6G(>VjWN9j6Nr2$+^XQ8c z04=q3mBesriiS}ELs97bu>MTtz>#B8)k4=IvEJOufnNu*QNxMox&6$hPBD-GqX;__`1w_SRn)u{N#C*(yaurU0>Zg~ z+hriOvoC^6bm;xH7usq7Y-(~~ZeUz-|59rk&x!$*VS91|3UsS?4jcU%(vCR?;oFDF zjshoUAF}!6baKC8GHgr@Du(YgA}EC1H*1dJ2jRxsCJqcC3;@Ci_Xy0-S7U^cEM4Ff z2e7Fh2*@1*rtzaJLjz#iru!Zc3qW6_C;rPH^CzgO?evvT92lqd8thhMDU6}zZeky8;>AWpeVrjec0WB=`-RE#P%Hj6x@*DQWgpgQ$U)cCmr1| zd&@OVZcU5xNp`UEezaei*m<8wu`TGiX$dZQ4?+YA5%L8jsgxSG&)z+Tcg#>(UMHW1 z`o3F!D|TyK!=gp2v>ti7hWja_Ii-`E$xw8)K}c6lrKA(3=jlE9;Ycf%pvhKBcF1*Zv>tYa_ePSf$rw7>6-$+YFHPxMy7(%}imX28zo~PluBxJHkrqv2pk-TpljP z<^#rR_nne+8tA^1uiLLFgh5z%jTWOq#!4Z5J@_3K5!Vqa-J-Rj^}sFE}TzmF6_Cwi`VZfcErTFcpoN)?)zRdskEu1mcbfA~7bpI9E@;ntf) zQ90g`jxM~7>BqTCS>6v6EoMJxzq<=i&l zvsGKS;$kONl)XBkFRm)h%J46f)yhyvaG#*JjWq-tO(l(<$5Iug$%jo3bG9S9`wSV| zzHPL(6WyPhN_*?5))r1GBC$Mwy>HcJf0uZv%jl?-{_T~hD!%tg-q4JZkf`f_to?DI z!6(=_UEy*T@+5At`pxzPTy-YUVKfCNqfby(uE~{kl#FBp7#4O&+)Au{f*#)z{aO^S zVO_%(Be!Z{8Yj^Lc?aSCtZrv1J9crE5#$zT`Bh2fx~*Pg4JZUx6l2u8R$h=F2EQqd z%{g|C4T>vw5=nfHVR0gg^k8FYnDegPNQLE^xUWJDE~HBvhIUu`sDPL%B2r4th<6l) zF3eFcNXwym6O%MQNTj0iEe76FJau$Nj~IExU~0`+0?CH zTee`4RP)J#nDb#g=@xy>QE!u!;g?be1#M#g2Nq`SwWT(Jq+NZ@`%!WvAo%Nco$aCO zjUrX4*Mur%`eDk3ndTytNKC+>*j28XBG($mV}{AqebNgTKh}_WLU_W>sV&JE+CmwFJH|_sC#?N z&DA5EZa1SNv-vm!`n8^l%VXcHPPj;8JAfXn?iA%pzd=~ccehrVU<7vk9CSg$9?Mee z1z)6O&$E!3#8q?-A@1tZf|lFJyG+z0Yn3M1?0ZjnNyDT&(35xIRn{I;^I~b9jFSO!!;j0YCP9asK_a?A>i+yUy2h;Gx1~fU z+Ng|55E$nu38A+ms`}gm^(*hlUi7f}N9Ukn{61Xv|gYH0^!3yD1!AqKI-@Qt>#kYMTdXFz^R2ZGS zm8Z4<*yOIzJr*@z%gu%7HqV#{B3fw{yTy2$uB&tox-7t1ikN5Vk3;7M`jm}Qpi+<; zQ$Km7GE>l$$eEf3EfMnwa$61gZ>ENvOf&29;<5g2cq~nBKaD{JnNrj&ZlTBdpzhV;+Cx(&1HB}hm?pcmN!D; zok}}3M>Qo(DJ3d)c#I35dX&Vjhh{B~wvwb8e1=S2e{aN(hEhcv&|EHgPkJ zJbBRbM`~-zm>kG9qjR!E-Ml@H@FTdLUaIQr4?mI`uh5@`&6zLsQb1y@_ zatN~*Hvy2Uq-rX|I41{!%_d|*@spJto*XGt{{CI!aQ1Nod?g9m5sVcp$hKL{Og2Kt zfNspqo=ks;?8M|mSwMO31T8707=_~fprjaeKbsO-Du{iOm6@oK8AW@ck(i#8ahaZ$ zn^ci+WnO5eZw-|&O6@vPB`yOwN-Z%hFD^AnAqyH+dR&~(1&ZOVA9l*+87kZ+VkvZh zN{tzxo}q@Ms1aYG?=KH~{EP6lPo8qTNemai#0aOr}~;(-#q)ToX112IVnI zDM^3=mUtlK43(_(GtyFrND5R(iYb3CG}IL8__(B*94bjFDpK)5vacKz1E1bklawAo zNr_4^sohq0LaxPjEVHND#w6!rAG%WgiNh~f{o|hWBOn~drIAU=GDzkGl(Hm^+N1e) zZnIs{d%Pnky>|clO^UQujQR;W+23X z>9~nEv1MKF(OtE)VS0*g{E5u{xVXzcQnTykquXjzP*WhODf#!LU5$S41Uad$$IF|^ zn;h49DPF6LuiJBKoSDCSy;j=$5Hr{HZ@P$`T>GJt6rHXzoY%>_-4yh=aT3LEh}W0P zxEgn&je^CR_dD_1hR9kSm-(d?In=r+y>s`i&ReS(KC%^GjnX1FI&52xZ}HyVKR$U? zagz}v!$JW%s$+{B+H(v2K+e7MZ+bz@juEc#wn({QVqC`efM;RpkeWiYeWz7HZpczMr<#UI$!QE#KEdY;nsO;DXJVLX1h4#-nOt! z5c!Q%=OwBU)t6c3Dd~^2e~8ptW%l4marSx{UagpMhaBHmlDWztd(?UGYycM=DWolD zgl4lRtWi&qw#C}n3Ff`!X302VZ{MNo@HK`H)!a9~NAzu2J)~pc{nn;Y>2hZ}GI*U! zZ)L0~om48}zLHV$QrY!%b(t-F`>Ij}v+_tOQPX=+ysSIUY_y2EPf@_^kcAEYlbKVJ~^)0 zd{uJn*BZ!uaq)2V6A{*1)dd4Mt5^8-7X#vd^Rp!&p{y>d@wWk?@t+0+BL_YW2P-{3 z0|NsqJ{ud$KYzB^SpEj?4eZ5D{`TpF&-(xUv-K}kLhS$f62-~H$l1cq_TQ$%e}8=9 z_{+y921eF@f`3*9`oH81tnBn`|6|UOWTKv|vr>0vE3XNL@;i(m6z&Y{49*M;1H&{N z@C-vS0qG2`SQtw{l0N|~f%Z%lOTwf5=EP%rh@WAz-7}fP%P*7qc`JKw>fqSXqDWrtfBt zqM<$oLV7TAez4=ilRp<{0pO-2w;xFaFm8K4_b!4LG5-ke6^K(e53pez07fCcJ;u5k z!YxDq0LEwY0J1*7L$HVYKz<-GJ^}z#SU#Yfeylw)~CNw{O?-&#fd9Escm}r z87&Hcmz_**e=P}esEAuoegimSew{@dmeuNsANcAYUhO65fZ1lZuZ!1St|!0cE1f-v z9Y3>t?X9j^dU$_0D5wYiZ?_7HOFc(Udh*SQr(QLd*=Gp$L&SMRKwt=eVbBoaAJj0f zihdt`c^`JHeGvOPG57xO*n#-jAJ+D(ogG|$5*iyHRHYt2y{nz5_h)gz1Qe85XAp>}0KjKl+~*$RRv~98LjXSn zfY{)EZvgr{Eu(yVq>!F1ptdV%{64@Vf%}#2ZC%*e@7md3aUcNidw2;T|M(x0_;>^W zh%aCP0Q^gM6fgjs??1f|-y;5#-R#v|o)ldK)UxDpNcz*cl z0bb4Ss~cDF+^OCk<6<|_p5K7&sNTP0e%#zqP!)K;f$-}f`1#ePPwAlP`H`qGUw@1R zySQzA=KOvNTA5z)T>W=qX<&|lgW{#-^6}^QrpsXyiUlY`h)iC&bE(gU_JC~=UC!nM zxuEBnjc{+mV)S3&%8ANy_KuV(_?jsF<-zMkhC{^w^*&((5S147M$g>unP4Da@VQi3 z*?HQxa*}J-W>`zsRJXPtuBJBm-mbSo^~$?Jk?8b4@33o~9rxeKM@ii69Wt3=J^g4x z202?bxG+r{-gpXr4Ao#&!ZUrhgzQor1V6ko>z#ZTO=7uq7)jN@-MDq0Bh|x4Mhq3SX2y3^AUoL z)hm8o$~dy4@kRcNMbsip7TDF;(NNrX9Y}i7mGBl9rmcP7axCn!J?KcP8U2E$OF*vj zDYk2DgI4bTU{bSeqI{Mu9Xph^yT-+7p58K+fx4QUbhBr~tyFXZKJuq8b z^_9I-s@=qPD~Dx>++5rRUuBym+UVF&u~rNQh&ecR5WuDWi!jk2wdJ)nByjDC#TmS3 zCXo*?6FSs$!W~s)r(aVjD;G!fvpjt^QLi1|sUOLRPJrsVar6`q#l0)7b4^Vp?vXi2 zYBGW`Wn$PJt`E3BMPJ$DMn2;x(q$EHP@;)!)XWSg4qAXu+y> z#g4CbnkswY5@MTEt!xuZv1%&cYL9{`v70CGxFncbJnqZTEb~~za9bn(9E>`?a`NE* zncdg1JCYll-Y;h*`l4BumbhAyCBZi7!TZW~=Hulgxy&&1vYMpcvD;;Q)h*`EJCcZj zll(9kVA6@_bg6aO(9D8@pG`D&ABwy)n;$?WFKu^k3(#6o&E+DwY7W_}S-OR^3DT+J zX-A{jUJ_3Q3`=T`3dK#DpM%zoNSwrYI<5fSUo9Y8W7qrL!csa#C*-yf`k^l6sO=2i zF>}N~>vq3ZPu?s;mBb4-bfB5l71+U#hBoR(b-X}*(f__565T_2O33euLUPe>1gW!M zHI#SxgaoZwi`5UOx6erFl?z5{kUnGCo@Icf)C+nX^)@gurY8d zkm^W8C8fmRmQm$D`_X@@=~yXS3Je~~{1iQLFr90`;$|_Wf$%LOPc^#>y&BpSz0s5X zqcI;j=u08soI#47P;6J9;zfnz3f_h8M}XBS=5ydWiqO%KoO|~^G-ePOmaObZm@bLi z0$MVT;zwN)Yn>)R;(mrTWhd63MtB4xH3Tt7@w(BBr>55S0p_s2hmn2v@MjVIPqh$f ziqwM9hR|Np6U1_kC&Bkw$BfTMLp)uj&IqsOE}8cF3g6D1Nk~Zdaek^29kfst!g6D9 zFc-Kh=Nq+XaB;Qwpiny=^HLYKI8CZ6q=@Y1+3(@SZtNUxSd^TUs;t|kFHt4`h~?t6 zZxydgjY%_0IfnS8`++ylp38kkTJ!H0DJ+E^V&6}^%qidc%a3dZ9too=z6v}T!dq;< zmU1w{ns<721?AeR$HHEGxLQUBy;CjSWV%BhZHiIRtC>=lWTy(`)HNLzm>GWGJG+g9 zbqXByNebReY;6GeQbH);^EV)KKNg(G^PXV3WPnIL8XTVHI3ee2=JMVPSRiC*UdgL~ z;8=YH<*k{|@`rsDS4Vl2f*T= zmU7gzk3spsC~BOJ(*S8x0SnSbHRJ{=8BFVqLJ zRt1u8UV3No^E6L1+BD2=#_RG6OrSXQUPcs`Du%H3j5hC`Uv4jqFyh_%u>T7}MwocblnYib$e4Kh|son}+&r7CoCLl)ptQDc{IZH;7s0W+9yb;*k8^gp&6)K@H5?R-N zrD7NOD1O1ecr-ykO+#ZT89`Pko@3{+$}dzSSQeHEC!C&O()@CK>L; zfzJ%o9a&SXo%WlK;-iJ4+=Q@RMzYOqTV~=tmi5SHw_zjWeEw4;ct79EUcHIBI08c!G}DXgx_mz6jqia(`SS_V*uKms zmaCwYHL2Gh$Am|*Kd{+(w%xY8grM5{t^dk##iY)u1yNa+@;Lg@Rd)$LvxP#+)5AIA zx>rr#IAMp2&AqU#m=reQ;yyFaRX%s=3r4kJ$J$@&ZR9O`j zk_?%qr#4l_VVrRyW*vsru6@tZ*v(eQR6vtSXej_D4_{NudqP1jvD z0vzMyXVb3=^qUsw z8%{;%bb6{@)V=33Un_Q4Rc89gO7E+o&DUsU;?KEG!f(sl;`uV}{X}Ub+00s?6`C7~ z)@Z$jq3?=vhu|#ZNQYg{-u6E$iQdzSglTvIp{7RegEvel(h%zOn-5$Kkv^Dniz7Pn z3W%mP$|;D6ZnaC3ahiT=?fLSuSw>(&>DTgk1w}!Nqob8~?CZ)Ow4-LTZQO6!yY!D2 zhzTVo;2B5tKu_8=5e66^oFz>nhSBTg-(R7QR~?0+Xi1ey`g#J>{E)Gns`8TNjC&#g zB}UgrX7T>qX338-p*AC+x<}DQxaEwLLhl3e&(DaOoG7V&kZe5~5^WoC~#eR~r1bVghWT~Bi;82DNIbh8pvXdxXKfbeGdXoh z>%Pn5(T6UQYEF9qEPK`Z&Y{PjODT?JyPf`S`w)7+^q4lIGM$(kfv<_`y^XY`J4_Tv(>)j9)7t*aHvMS1^} z_q%WSkL5J7o~Y*Ba5n{``5h}P8YB3tTEQOrjL23ec3@BaJnAdFn5~FPBIt&0N-=&+ z`~o<8&^jX?Pszb1(S`QXU;zfM^?ROxNZmyAEc2!h3e>HMkGuQ%Dy63E*RFNAhe-6q z_Z|;yAfO-_!3tqYr%{Lin^{KZM{4m zW8?M2H9~o&RNCHJK`vs)g0Mc9V*b90xFhaE+?|)$PDtFZDH&rIk5I(?f>O8xbwE)i zpvXV;9eSU4*n;T4K1yAp)N5)cKpG}=>mJtO+nw|p&CFY>Av=ob1JqS`P3GTl(}KnB z1Qz2a@sTO;w5V>)CU=rXxzt1*WHSekD4EG@rH-%0BulM<@OeX9B8ho#9$d33Ci0X| zeW;|_)Wr`dnOycfA1t2L!v0Y3Ik<3y@gnV2;RtH3I0eB=qNJ8Xo$5agDXLP$tX;IV zw#JJNQjA&H$$u(@@2|!~Fzw)ZP!n>;L?&ylmQQ3xu=T%b96H|>mn+*2ex$%2jq7&= zCV)1Z<=)T^EW{}=gEY{AAq14C`BO+9H|?+@Rj%O#)Y+G9N^Ptg94xtnsHe=3aS=+u z6Y3OMf1LQv8XnYBGh;~VC=Fs$Es}u5K99ORtWfjH;@dJ)JJg1q zE?RLkI=JK8sMi;%{d52hMSg7qef4DQtXL}_I4At?X)>gz_dGa4Ol!}HljG;?RdMEdH}KC_bJO>$)TUa^?n$> zAQJ&99hlvSoMN#JwPjzq_AcK7#KmM@s)G(Wn7HsMASZ-b%|sjUh1(@I#r-zE7Ie7A zEz)LOMe4UDh}b$ueDDb`%nUN1HE1Wc$hZ2%*SWQNHJG|892eW|PYtmWFFk{}$Z6myueKOG3Rk>DnWb}SZ_RyXF9qGUV24OZwa4fQY2CoVUk}~vxT6ETZml) zTeksy@`e1X65yv@Slz{z0+(<~`J(2{ z!{A>Dh^PNtiNcPy->Px7F-lA9{E&NVSu z+2%$o{+iuK= z#(O6__s*b+G`wcKuAW#oLd|VW*r`qI0MZ8Hh|Nc-hxKGR8%~{Vv+qPkE}WNmX`R8Q zE}dmKxCudCg|7mh*(?NS6*gQ{34%A{tK1_=_mGM|ucT+<1bMRJ zonwx0a^2%A^tK7N#K$VjW4l12l`UIa~2i19!jXP`3!p&n&JjvU?h<+9O>{ZWXn-|`#pb6TUSl;K;dS`D3@ufqW>1dm4ni*`yr1S-(gnM1Pcd)38t z_=F*mn7nk=?T(gp6Po(Z3$z=5=J5rFNW{Ccs!bXxgw1N5yzLcqrO-J+pnQdsC)ir; zS}Gomyef!~pE5N0tI+I57r9ABz}~6#8r7F~zB>z_b%*MvLXxfKw~RLA2Z&euV(b}s z{x8zrDN3`hO|%SU7#X(BH*DLs^@eTRc7~l9HZpA6wr#V=SASPmoj&!C(P#ACv-i5$ z`}$dP&Oi~}66tOe%$y-XeDL0Y*SD9hCUR9Ayc7jXiJ{-DE>q<6C1aeF|p_VaaV>P*=n_Dc?!rF%; z{9nxxYS|jH@j<5@I!RgwG7t^SL4iR@CP>dKg&CtfKVWuXaD(Zji-j8^Az`n<(NtwD z7mCI^ud;1MnZwH~Br&*RwS)}X;aDA%+(wNurV^a8m1H|l^Vb9x=2UEPezj?r+jX4J znN_;%4+%|SkedH>u+3D&%J|$^Aqnm)5Wlc9X$(AOWvB?aYh#qyFZRv)Rqm)&?ud)OO;23GZNk`dAy?Nv{zRLx$aq%Sm$AZ-zrhSHrmmIPszI?{VxEmJI$7Qd4DHypO)gWN zUAksn_S=l_1Y!i=uJGli&^}ZX%`hoQ_XJNTd2mJ(8xzVUH>NPBm~hIx72MnAvVcy#4GQ++bIP}N_Wm#sxS zFiIauIuG0V)_^Vh^D2e8iENIxZE4@2+KX%T4d!_ha4n|V|@E_r#QAmtXPUBIwQl7l7;k z?n?ZR4dH)Bg_s!sCkUO1i<$Mmc7{w$EdTII|1v55ua`<#Ihp@sYX}Pvx3qBqIuQZH zZH!!iqCgXSQy?rqKdiHh6VS*O)?=;84XBAHJ;#Q^>rrbMEaTwr?(UAYvB}ob-j2Gl z83f_}YllGy1+S~s+ugqY{p&M#cR2g(Y`#QZjYCAdIA505!q^-Ft)ap753tze01SG( zyp)j{1nU$FD`aPMBm_S&Yzo7znIvpVkO730k`h&LW(&Dz0MgKO$Jhw$vo{$u08U`2RC=1C@9r8c`_^r zilwo+^(81HXlCF1_-dd$cu?cVcfw=$fic6{7Tg^AJS?KM0Pt~aK6 zKB?f+6vTiw1&6m5{-0I9)pXSWc1P-*}3yH`jH}nbZ*!~?4^7|IRumMzOx?y%hz~~70kB!CYmvv#r+b` zmldHjfrB%FlQ6-|^52Wem$`oqY6xwDxyj>%n>R3;N!R4m`lJ9IWqpekq!tewQkP!} zlRxtRS^t6V_CX4gWOHC)0pAFj$^DIN_UZm|y?%p4yT5Hjn}6?r=*;|$`kjYB^f%^P zsFEmh$ZaX#`bB}9&R@*N#?QNVqz5FQ;}wcI7>}{8q4`UN#iIPgKdbi%)5!r;Z_NKG zU?JdWc5?jzO{R`s`v)=hN8MSfvf`igx^P2N6P(`OCwzqbpOl3e$qI z&Y$2x5bd9iYJ$c7rC^6%VEEts``=x4!oqG>`i*oT+7yc4D;e0Jc<}K2->GI7d(ci> zuLj@Ug4YlJwPim}l%T*i1BY&Cququ!^5|8vM8_F}#xLbKXCvq~%_qed#Q)jGx6du+;zcVTp$Ex1@SDDapalod)T4RVO4oeE>tY>s z`$rCmJL~jzZe7s$v|U^(r6mS}**6yVq((lP5?6>8CD{4Ao9)H;$HY)Iahg#T4vwzE zlx%TG(vc#;5K7x_SW?Q3oe9mzGBaB9D}A(UQt+24hKHKjf>?v8sDgtW!V(15X} zx%Mw}$wClvRFl1$)bpDdf%Ja@m~yN9GRF{R2doqMTUp5H?aM%uLcDozw;_*bnF12;*mX(b>-=Y`6>& zlB4U+ccg_^D!mRf7DrM(V?B4kimpEkFPuw9KPzn6cR~rD9j6$0lZ1U|S;6g%{|HtI z=u8~61{b!;kY2s&kol|S^sozOxoH-jzMut{+YlnY$+ES9iDBN^QP9*sb z>ZM@!*>!^jx4N5vg^Xj*{7CWllAnsnphh1B&MYG$s5mKumwPECM_Q2q04PJDcz3i( zDP>S69YYDXnk%qX@`HWTRN$GN)utA!`61-h#m|9Nykpxk_q=tbqsGydw}l}YL;Xj^ z%?7r#>Z|}G&%)@EbOa~1gIpJ}YHCvXRlbKmrq?gws`zv3xrCx=I6Qo+sySXJ9Uvy4 z+kKu>qh^<}Nj0pF_%@H)E9&575gC-z@VBK@0glS$j1LwwYf&Hdni`GS^LXQwFX48v z1ryh2-7Q<*QXx)11IVWv>hI?So{KHWKjUV}1XHDBA^{Qlt@Cuq{z#WU=3m9No} z>CmcMgjD_Bo}d z6|K!YP$_&!6!%4Ue4i$2#0TJFrmJQC;25lI35@VW4irq7tb%EY(X39Q@a)68LZzM| zKI!~apRsRb-(gJvqP#fMj29Sa6!q4mNA8J0-76VZq$nD&-*;e~0zFA-dX9$VsqHU) z7g>xwY~i5hf0BcWMsd`33@qV!>yHtpP_bE>J`SN}fNC~EB^LH~MKix$9r&4OFr{Vj zyK=xMTZN>pNdC=akxm;7E-ATYPZ?2H$z*%1!9qud)Hm!#+0_t`Q|vQhIJDEd_3_F9 zO`@n~*lLL|#}3Cil28^6$pt$aqGLy=soR9K`}_c(PYbB{0i8!U4##e`j@WH=@g@p? zza8+S>o4#U`vDg~)(MLT|4tyHrGnlZ0rooU)KMT48;}WW4f|``5Q!}Z0cFEHD#S9A z4TJmP>_>ph%4jHDh*Y~zI_I~lt*_0_i6I?&4rI#_wYV6 z*stI(_F|LyFlDGa=)z`BFM+R~GiN=nCS)u!XW?NSz(uu&OoAKlXGm98Ce@uwmwzuu zw_oC^*B+35aw^VtJ0MSb@;dv&14CIr14ADwH*-0P;}Qd-iGs=6h4WR)1BICv? z6^8t&0!yZvy&8v+Vb8+DFj`PUtrLX3%Dh)rhCqK9E1EaD41d!LcMeV)I#Gfg?oyE% z4`*0p2L0%%0%~`>xSfddR zpS;t!>W1a^`p^<=4=zu~rwGrQ%di_Lk3}xR|1_G>aCRKIv=3Jh|gC-MKh#IP30n%IC{T*?N}z zT`nA{m8J<_W~$YJ$_jJHOOi-MuCT6oa~-7SO*!c(Do2)m`6w{;FgTsP^fzWZdpy+G z(}Ro0S2DUh0_3G~FS9&7>s%ICU_7EQi)>2hk6WqPY#g~TEQSTe##z?%rl?rYNjB4< z+g|B7sS=NJjMSDT?mNCR2#B*Tb^YUm?bDj_jUh~hV<6gDv#^AKjt~oLO0o!V6b zXIrGdLckaunMb$GWaT517Cxr*x!!SV@CtuprFPT!mydpZIe!^bQIE9F21X&s7hiKH`;`iFEd zd>~JN;Ah&=CLDFQD~IhkR9!2?X6qX^K9*Sy4Z`2tHi9N5JZ|G34BQN7gv1Gy8lsPG zZlKRchv0%9dKNcUh3bV%NO%`;8>6oiJ^$+zr*`tYw8yiglA!6M)a*2p; z4kaF@A-Z@f{*(~I^n4=PcB?BB6?=zZVEQ2b+HiRzN^KhTv>2N;7_$QkFj=Ix#h<1* zVD*@DKTTwQ>}VuU#MI<$+uPtqJ`O5F8&gX+5X-$3psGKlxQw36c-4h-O7#9LCUEOj z!F|(3#N1wrT`{ZCDGYxae!4zq`I-0-w$A7KzIC)Feik++#+XGj#y}lB5XU_N;&PCR z&fVcskHa*Hm^zbmZt6izTcD_{O|nT&4E28En{&DuB`UBM;WaeO&NuJ1U8g8tnr&F} zVu_;TPJ{6)lg$0$QEd!bq$q);ll~N4?{39MCXr0xq5LNbi-BfLImDB1uyzSHlTewr ztg)>I%)S6|?r~tMTchL$dT&*?T31bqIOo#Y?Vs&H4{B&P8`+ozL*g?X`^uk>uf~t> zk=o@YDe)FiYl39%IK4KbFbeN>AQQXVIlp75u&4M=*V={3LW&OEGI*KR(kKAk&OlqX?&^mdLf_pl`FDv!2A3lnGZ(~obbp%4*9 z7`9uCCEg1GOMbBDALFR>yjPZ9NB$WeYVq6fyce_Ire2al5s$1vk zEy7=f;wB}eZMU(fK!!7bkwKA;vEYlWI7WUz-z3KO9_x-#T`XWpUft-}rD;lp%#p&$3aa1q2Vbx!57rBl3%|>c^>Lf@w%iOxOJY&{P~Sk+rBm}= zT6%9Kxl&&0n&f|yaO(o~;K|)_^Xguhe7Q@+Xn20M8^-{}o& z2X|Qj`+5n)LpILLN8E1(y3vO7|M21B&KpNVArK1*qoj-UMupNr`}}0-Z^3V)G-zqb zVB1W@Y&BGI#)KYXVRTS?=jtwUkk{hB1q z1?wGpns1Ik(3yu>y_{%!qn0uD3*>D0m7W4P2oW!353ilPy`pes8pj?wE2MCVVzScd zwn&PZJUvIq2}$Q$sIQK4O1Ox<9e(=6e*pPztT8gDS8Ky@yUB=HsCvzG8hN(o{lsIRDHb|2HtkZ>H%@HoS=OaF$TM(9nO%7J1(Mt#|+VbiNqDM6p3_#GleD}fYzXAwap-stu8Z}MUz6k4qguC7 z>%r3co40HSs&dr8A`_E7#t{bI^a#vg-j22Dc=zD*gR~n_!~8Q|ZC&1ps%kHh0z??O z^udP#TB375d9U;}QNK6UJ=0Py9s^s!43{E+XQv~!D`uto&TfJo0hGNSa)A~xin~AsNUO= zJIB&^n<2W7o+?7g+#_gt1v7nV(hW_6VkNCo5pl)Kk5-ownya?l2uluF;JQeG(iqWE zeYP&?Z&g+#yWBtT6NC@;p#p6>zIUcvxyth%Q;!68g#q$ zg~tk(lbxBSW_%L0tE%1XPjsX`%5DDe{W&=$csz&9 zLw@*)dPEhOR-se)UJ25ZfoH*H&-H$v%ELnynIsUGj^Ap}Z>%jsmuiAJDGe^TzF|3DXWDdF09&->cH3w;QwAw9Ug(HPsUNLT6H=u0wnn0DQr+i>cg}#a;}DY zJ%tdI0mB4vi(_byY!I{lk}oUH+Hr6$Fc3|0U>0}T3QqD?9NNGelC(`F-Nmkh-5|V&$Bp*7$_&T5=yBG~8huY`UKZ8tB2Pl2ImN76m=zGH^1e@S8B69vn#}O+<|u zO}CR$ER2P;Ng-7P?+)?gsh1)|U;OY?S-^2#*hNNuUbg`z+(Dzs$EF1(TnyqrAtQ7FS(!s;T&RvfuQ zu<4?Ru+EfU$z-vke*vN4bnF)f<#p>s{io4!$X~q}R044HNPB%pJ4E=dqEljMYhOsX za&6^i$3}Mvt3|MMudap_&J%6mFaS?Knxg0^3GJ>H^H0q#NJ-Z!I()d^DYZPGwr4Tc zwl!mx)HbtUL5t585uujfh=`)gkIfCnd7xmdnsu8medw!2!b+C=3LTmDyV`Zjo2`2L zgupkV?&8U&^q!pBVHo4=Sf^IVcOdB;zoH~=-1PoJOwsM=l4{bN@G48ZwOL-r)4~H& z*_(03ab?|xy?_H5VRH1aQHy&6`A7)dD*w_va?`ch*eW@_V4QdFIi%F_K({on1Z23y z_IwS(cp+D!y-|KOdD>VAeTAdG`R90p)Ik~d^*flm2z)YM4V+UrtPay(R(8a|ya$P2 zc~;NwaPIMVl3TSz6av>Jt2w=Mhv3;!2u8|X`=?mdbOSciD}=wNi_%Loj-C+uCm)Rm z)Gbhc1mbs!a5S2sGL@$ED*IW>^ED~>Tp%J65eYCv7Y`bOZ;kd<3YiC8V?^xdQj&%( zHhQmbQh=`P-|sJF=n1=2Mb1`Wj;O!I1VN$SeGa^JlFbP|$gyy(IOrVEa1 z8*@Ygd1fJB$0y#eY!YtVmoap3q@lyOFR6_dM4fH#N(c~L8^f@;1ZWUf7z09m*+6LD zWd5P|(t~l5p=;`Gq#4gg=Jf2WM)&J`?p{RgRBfptWNAOcTi|;EE{so|Zo6k-D=UeX z%9$R&87FOLG4DsNH5LG6L7d7urcWV#O|M@ECo*Qqax{+b3IA5hf84`EHTPYzH#(*G zJhn)sn={UXl4_9z6Xu;u_gC_@FX^OtrWYcKQfMBBc$$UdRl6`cuNZ`HVj+x)_~Xbz z_nLM6-!*stBjrkc%T4ZciyES&XV=B4iFn>AW0m^U5<-cQ4_;JV{L|F#!*$cC#seWa zZpgW%CWX4t=YX7$YtP!WhZU)!LH9Sh!o;YM>8I7yJ^z%l05@9zPdUBRyu$ei=V>JS z=sJ<1>F-bu8@yTKr_jC~m>zbf2pT@t3Z{AH`OcAyP5g(czg)p0OH>SE8?+uuWpn(S z5Wnh-Ar%=p+$#|#GD|#91$g`7rm?7w=6yTeYg7i_j7oAw7Wim0q|UX{{)DJeersxI z+AIliWrhKP@H3XnoQ_e*JhA#qbul@UislWNL3P6a3aJO54z5N7IRVRiO-KCh z2fj!tXZ=mrWX!8VZ!<3`EZV@L)@~`Wn7)$;(ay#5YoPhSA^h9?*Xrh!XWR#eY(s0$ z8_uA;xXQY1N-Ij zc$-X=)gu13$X-mNgXt9Is{9ugRAj4b4unQ(eRXSflSjr_Db}*mI8(WSQuZpSHmwaZ zT;Lb1>)@cVr4gA1k3gt@Wdg!^hvB&4)#)d%JSlF3_>SBJGOISynn6AMhlhjKpnAG2dRnY4Y3X6#eQiP8&s+skL)K5re zf-!aTzr|+khL=SpyR;MSN7FCH)nL7*>))y4snqsa@Qs5?-{!H-3Y$XsuE?){)eu%t z`*f-ykCn`E&b0CD2S0YlJa&oH1pz9ao)u(vz!xg`_L1$7)Vf@I)X(yoTka;B>rUsU z2i_L#5q2s)pYtc6QK6^Lpc5J=<6@rf{VM0MqQj2y;%~$8jAHQILfUwh~Cwa%Yq(7nXW-MbB~n;`f`%3pd3!Umb3H%!k_lQXMq5 z-$`WE(ud|$hzyF$2y2%p^D7vH$EkC7Ws3z?rD3@+4%zizX>_9u`v$ntW32n$ary_k zrA)qNXwQw)|M7{NxPLUnn4g*(uU=IV?JA-P50vu6NYXP0tnFT%La~r7zBWE5-IWOX z%U8u=9DG@m#32ldROum_-RKomdm;DJ%R2@%+*+OYfLHJipVu%P-Z6tX?lIj3I ziIt{ z-0_c?T>3+1lxXFpz^xItEpfzIhKNl{RgOOj5u3jqiDP!--*4O1Q{@vnyafuN)y5{a zCo5p!JK$VOxIHwjLp(G(CAL+V#?Ux0ir}P-^i&K-Iw0DC-{{B=#t)?m@EW*$?s%Dc z3>ErU&v0*k57O$#x|A5?8t{l6t(7ZL?b#(FG~NWyD@@WPSzOUi=Xe(P>x}MzTYpn%kO5nWmP4x{zQjEf&5bq ziq=8`sxvkRKl!N5x{CdGc!@bo`ro3;NpvR}#z2rFe>6{PI60`*ES314jc#Koq_}>0 zt|zA^-pfT9s%k3x7v7&eQjfC#h(*+DI}-_E;Dhk!-2Q_#T6Uf7;-gu1Z@4pGt$Wca z^n#9Q+U9^1l-BFx;U+gzS#Ak0pmfwn@=Wh2moB|yLzX?TgVSA@Vn`g?(j&+1&WjRl zOYG?(ZFyL6Lq1*Dcfk;^ChJaCzK*W&%?NvF4NG{)a(!<5;~serX9Xf|JS=}8ec5Sr z{@rOWZ+)1i%X~Sz=AtZo01r^ka>9YWIFv?&stS8Y z7coxEmo|dYZvD!jj4m7ZL!zA1xzu}?ZT)X*i}p!7uE&-YFIV1W-SEm`6BKhG)Ejf~}V_NVJpJ%``T zE}yib4EiX+8d4&Ot&2TDDfFX}VFK)M+DY11F~$|No6HNe+5KMQ-wlIpTAkHWu9AdZ zE_YAiGM&OVw%a2qflq*tFYH-Z9rzxg=Pa+^^|qR6X5jKe`$*CMaFG19_F!Ra*k3y2W28W1JHM^P@i>HhZ#hfx_KlV7I%yvFRIgfgl(|>NN>NeNetrl2W1l;&6 z;@OD4sHK|J|32LVOX@kOuAPnsyco!uY}Pz@OB zF|VK$5a?r(V%K@!tAKVu%X7=FEWV%;BVL4!X;R|V;?()>KC#r2I+m0q!2YUlxGWpH z!lN&qvd-c@Q|sc`cPd^UQHTo?uo3fHsAbI77TmW>!DN@a+GY(z@KIF@;ghBct91zj zCJ)Qs@ec?xWUMWI^<`P*lH}+8NVZB;@Y3pwcBR)ceY;#yAARE^0>2IS5o%3bdpISw zqcp08uGyM*Er~jkY~ho49d`|l*R8+3bC-SuA1FNYQTR?a%TeEBCNGpDZ1h;5z;y$k zdd9|5*_v?(Y{+eJI{tb7gG~ zDo{PQsRRipseoVTR04r;e0J}=NfbK}tnJh0jVA{ZifA zZ6v6O-PYE4#26bJJ|@RXMQBtEFJ{q7F}f{vGyV9+Tn55YYOsOhgx3Cis;NyQ91{VT zNt&*M)~cV=(AcJ7@PP>90UI?_ny=>i7)0faYo(8mYJx<9^+hZ`FKnq zfEp(2{LGiq`B(e6>)bvB)}7lCv5O7251T$t>QlU~$t`Oxe!P97Su#idrO1T?UNN3( zh}j-zV|PvXdaBzcRr?<6;ZL9+S}>>$iNkrpU-l|hdBDB{TVlWP81~#&CYv{vi^PJt zPkE{FaeG=XpWVG-7n)xlS--hcEeA5a1F+!^4y5tk9rdsqWqgUhUtwwDk7;_g@tivy zOS_!R0cApA~_z zRVtHH4UAhkO5a3E$9Kisxxs5GD8QOE7E3j!K30?yqLOgZLaiwyZ2ZZY5|`PF=T~M4 zbsePcLkzqW?m#jyDZ?YWzsc@uxx{T$zd-g8Tg<6FeGT0jF_R?PrVxV}!n0$(V@zAR)ZJ%MKtOrp6z}ZvP)G6X)=vCv zK{$Z;Zd7m-!o{JxdH+$3h8=RT36L^Asxlh??dgQV-I@YeJ|ppEQOg9M3_xs}PnLY_T^dOxeuFDLI3`QgYV8_VGmguYsB zb2h?Tzk(^mjW?EHhbq@q^B~UCd)+jzfKjNRJqVD^T4#|rulRM7qFLS#-@lG& zhcMhzPH07U);o>$tHqLoN>~)KTX&XW#x`uP)|G}SwH)!f*%pr`iUFrzpN<)boxiwL z=38H|0bhkcL&+r~(M(_zkPA*_>y22PI`ZI>(0dL$1wad)%u_qNjkd`-S}fJFiJN@Q z#PxVvzpChX40s=-LE!U%0?2Q~j@<+L-b)&ZCdudHhB&iM2!RTP8 zY9Hy?18uKXb&^XTrPkPz08#S~di)LMCVX}hU9G!@!Hp?bpyfnms&eL;NT1A?Q&^2x zkPVL{LyjCqJ@KINY&cGv5-2-qi(v}>Lur64DeI4C7gNI0+c!1fn+W^wBZW<)rn4;9Ci&Cc9%hK^wN5^krQCXXHB$n(Rms`{ znia=8BEju77=y;9@GP=neM6)ISSD+cA=#4-vXTh7AssQ-oG22{4W%wz98q)5y4#HV_EpWJI4V9%Bz>7Zg5^2Qs2uN8*Q{@Ud(2cY}kZimy|iV2^DRF>qklQQx)VVJR=u%0M`r|rX-iCN1AN~rNH`=-0~6g?!Y&$NN77_Sm+lY1?pK>ZEjMxE<_x>WOFdf3|DLE+fYVPCDtOUZ#)D4QL_ zb-=3O*wDqkoQ6e*wN(Q)r@o2@%UixyyM)dYBI|x|dS;RikREc$;Vcgrn`+vjg1?Pn zWW%lvE)s$S{v-*J|5e*YRw{oQ9v0oP!=#@5$7K<vHk^ZnC} zA3D8CPBH3jB%ll=R#!rWoO9|FO@%z!OJH1*$10rCqPPu(cYPS=3#_KdIcEqs+Rknj zDC}9cU9fwT6Ua~@U$QeilX=J{gHOzy!O$;lC81`NW7FE6;-r6dkLtH57pHoy_Sox( zx<|j36)`tYOS5Hntl2l&*hq-5SqQ&Qe3Y?kVWqfQl>q1vO+0_e5#N##O51Ib5d^!5Gr zY6Qswcx9=xKT4ec zQVkzVc=mnM%J}t5&(mo%6`7Yv?otL98(=mMC#c>XZ{9eQoHWt8VaD}KQc07GBshid zVY*HG^;6$nMKk6%*Y0H9aIHn2nUQE8erry#Aj9i+{bGU8fEo5donBn##)}VDM)@l& zl?!LfWe&F-owk3WE+E@fm(}23XO6_-{V^7Z8VHLQoRiGD>k+*{%KocTSQ(a3Q0}&u zK1X461_b~E9z z%+x~fI;|dRATfhvc6P2~B=_oP<@4^ikaYsI%#jVf$r+S(kU_895PwAd%Q!Why^H@1 zs+5B{pC2ZOSsMQIo~QGSauZwK*I!(9%&oO1D%<$8tZ)rX+o80H^cTHA9J#i?ar&hB zAE!A@rq9f!q)Q2W(Y=yDI5CvE71^8(^XWMg)b&PgC z;UBvRF2k^OMO+p06{TO6747=A)=C>W7o|QMmPk{%tcbsYJ1+UW3OlaqsoDnNzF` zxTW|?4%h93V&iosNR@hrX42lsKrmp%YplBRLfH-@HVl^UV3!2r6@CKyVY?4mFSKft zlh6^RCdq;LbsYc03%XzsskhCfC_;z<-jTPwmA}{wm-Maf^=F4Ei!Q2K-%51B2{PDS zQfU+H_D1EZ42%_Yd)h8e1b`Z53HoXpeyj}2hI&}}ZKLbDiJklY1-dkmoy4-xyCU)5adr$bYtCQgZ6P=ouAtJ0z zJs9Q>`f2SVSZI;QPMQ3EI=Wayiu5vDlLTt{C$9O&SGb4U8OEI3$|?zsB3?WML!HBaEI*M(PD&c>~bFss##v`bMS7MF6>Y2 z7SL+qa4~yI-K4_|ac(x7qEHtGWDnNWu+tj0?YD1`)tK1k|A{a8KS{}`ODU)ci~Ylw zsQx>?f3X2NJO5K+ z{8x+7&ehf!=;Ul^ZU?Xj*xLdB9T(#Obh5NJ1vuEaIs+VC?OlMT#x?*afHS}uXlwbe z&vFL30qp?JmL7nA{h$lL#li^){Kw1+a0R&9nF5`hP3)b30Js03YyRJn$A9rO|0`kh zKh=1+I2iwvs9`2zVf>#nk1XsQ|DUC;Rmq;bs?qPmQpLpHKj_c!^?>(0Lh+y4GF_tTyN=f}L$&LOX{ zlVppE9_Eeg1QIDBl0s;p2;k1n&}adYQo$jiY#p=EB#`m*qCaP&KtzQ=!Af6Sz!WV( zNNT8POQ>j(P#{@vazVGSma{|!RYfkmf5I!?3woO*K;sz(5N(NiD_RjDYxcm$59CLJ zDhJ?Tz@__56M_7(09#wfj7HEO_(!q`7BTV@bbIZJLSO`|_O}|(20R#0zzgB-$BSc|M2uvC z%&tRy_Qwnr_$>-%tRwv}#0M9V!_ON3);mEeVFC*#&4lv!QhD@#KnnX9Pr3Cl`2gjy zq_(t#CQrEg_&mCiVWG!EiSOH?!X&0dBI@Ww1|=G^RFp)74g$f#gS|w`|D+D;Rp#VP zOafChLjh~q=@i<2mePX7y4`%hqy{lO5Fm38751P5PWtN*&CP*eJ)#POFuqZSfEoVE zQ^Ww-{(w0IVLYNNRvrEdNm(NJCOJgweaTBuUcDzwNiF$#m~>% z^szu7EJgCw^SznY#=RvVi2^1m3^WDhDy1W;A;P@#?@Qp{+OojA9rhPoec8SUD#(Vy zxr`SN`oiiZO(of!D=&(+vpnnq{6Q~KclUK&uC4bhO(ZtHAYfzv&dL47`5OA@Ck4qf z&wI(6w@r*hTur=Etnoh0SksOqHGJPCe~%s5#JhBk4GHR;3&w*iGx50CpEd5ZARc^h zRj8U}ZmU&sDZ@2Xn0b_^;JZ`eWpb?ZNWr2^U{;kA*c1`zMNHCfKXx}$L8Z=aHWyFM z_IhCIKS2K%>n(E})%pdJu=!K>jgopejWp|3-FlRe{IR^AGV%o?9%Ix&R=cNaeKfm>I*yF5(K zI6IeH*+kqr%H*p0^OS!RV&t>AU*bTCFQle2UlwG~2nFeHQRMOKPPt5Trg%7wX1 za^2hNn$C!n_&#FY3X+L3LuHV7o;n~M0YMUJ^^cU}&tv$G?)!y6(z5#BZCGbtiePJB zeQRuC?v2d1bm(NiY&+tw1h&&i=cij}C)-q(LVBxwuJBXd7{%<)u-Wue zkx{@G%m<^K{w@*b1dp%?xo^8ryTM)5FL*>4!OGuX)nOda3|DlFHLekG+(;76KGl?k z;iu{@UEXuuDI}A%BSzgXwlW`=AO%&cyRQ1B!|ZtHAm z7Q09HhEfHTTxS^*ep$fzzJ$J}l+IK1BkT{n7$H?b4$;wn$c& z{W8QVQJZBw=cpWC+f{SGxO377NGdBy-g2n$|OlPo_8%jSZkDX&|A(yXY z*wPA6RTH#g4Z)CwUDvo4_vsX_C@T7A$vJvcuz~GK~MbY~* z26uaEnZhySWZh9;ucBYtG|-|!7?QM7uaS4Yb}IGFNdB#dCzG6ac!IPHJxh6S=h-r! z^NVomars91vG2mMW_i#(0-sT0)TYYgWo4n+TeQe(&{IN_f7!=W_+FwZaGA2>g2B!@eaL1hEC@cDg+o%}Ih*6%PT+5& zspd7}*#zTz;|SciresY6f0af~mGn|HKRvB?cFnss1rDknio<|d@J0&ObI>Bx?-)C# zS|G3dLz46U`&)kaEh3kfx8cz(j*hbp=drI)xYB&5)HFpu>wEhzD^x4Pp$(x>apt2T z{t5Osca4(`E0ZRW-(HskKsJS8Ov>XI1$EI3oA9(on~ltz&1IrE3w1P0M?NZ9roK%o zj?D63EGj1Q29|L70*z{^5)GYBGcBhB4GLJWQME8CUI$P5?Vceb?+a{SBF+lb{!a+G zN|w1;45P7z65eU%{41E_`}drunx2~(I<VOG(F9?3>#j%&Fzi&BYs;+!9d!FajE&HwLw604| z5tb0}2;?4z6Wlkn?Q;Zg?DYdADj{NFnT=w%kYW9X)#Ibysw0CHrk+j`guEi$rm*^8 zsi}O}Tn#8nWqxgAqCTz8|K$G-lHrjIEw+PqBuPE0krZ(naw;y}vV zd7QwD6o>6#+;2I|Z_R|MTjnn>BwszN2KZqfQ#=j#g-Y%o}o~8FHYYz0@$}{o1ZBzY&5?yI_86{VJD^@P4=^k`u zl+ZQa}f9E-NDO%9i7<=8T$HE zc++efKRqv@yGXDUbj>bsyf$+uOG4v7L}0tmzB7J2@Wbb61}QXr z9bQ?`k(NqP$X=q12c z`s3S4km&p~CgEF?$9U5&(~k8jJrN8i zS-5;xV3cAZpI*$JIwpNDw$`$1uWPg$<1~8G7T;~6mMB*b%)?wbgz(pdtIyu~^~6P5 zt+ODsFtcpOq9yI5Dr#nUfY*c#pn{Zd9bsW)E=-et=A--tIcStwFxqAi*5g3on3!$RK*>4 zpxDlpGExMkVPq=-azgHQ_x+|J%;iFu00|)+2_b-eNnVnJaPPQ#A)!FkjsYDMse=3{ zQ~^N|sYt-`qeLJgGg8XP#e)juocfU8Y z-+lWJb^GVjEb<%@$Zv_D+= z!Z+(Te)yNhhqngXmz|ke`DUvbz2HyHE9g)SLNZb-{Y@`m4=y&0qW6 z$T^)}HoNRb&od3_+lCv5hONEa5c6fP+dXhz`XB}T@1y=ptFPZb=SFDj^+ z_qI$~-nONz`4=bhSM^=7yWQHFzRz5}sk!NaS=SGoZ(P*1aOj>TH=dpR1)7%^T=$IG zG|uzZ$$hO49?nsxUK_ge=jhL?idr9^Q+7_xzd7yk>MOw~KWbhaE9n|N+gIrJY?t8+ z8;<>L(YEK$9E@Kb+SXMF{UP{Z+n%#8?MlD0?1MG4%pqIC+gIkc5AVP9; zTYK~vx#*4Em#it1R_)k31AfybTO8E)TGJ;B+8%vqt#mTj=j4`_tBnoK1-YZQow_;x zi?PT0Ev#zXztLE{$+x-J=8NX3!+WkxxzgqJ*?&Bb;l|2yuazGi+nRp#P_?>r?|UQO z2YbJ)7;xlAo3bmF!TJjQ)chT1<{$gG_49YfY+_zY&klRyvsYKn+P!~Tc6635)Vy`L{6A^ZC8>4dg->D~y>Wd^QQB-@`P?>&aP zi$K;~ujqf@vd6c-p|7Wk56-I^wf?Zb&Og&{l6rwt8i*&a{qBeMk$r`CU+P8os~Mp= zQ3Lq%%!uXjPpGf3>`y{O9)FG=H^^Ure{^VcNnrAjU_s6#y8vWHEKCE!Ts$2-GK>B96e!Tz5|Asg#kk> zOoJgU1Ud!7_8^eltq$)F%!IPMqMVW;!GZ$k=@kZyvs{;EWKudwf{}5DV#s?hZpDb5 z7wGO}rLw{?fwDro<1^&-LOMuLdLgB_6cmI}2Nt$-kKpdyb9Z_vEG{jXlxJh%ZKOGi zb*V*ks|6vs0}JsFw_XIIQnO+@$jb8EB^IU=Hftf1AHl-qEnd zcNPtoeC=N8$rNKZP)X{>@vjavLg!s&?qn%;Ph`<>F3ejl9inXe?Npao1bMmR>aDtPgow8HEZ}SewhaMt zJSZ_Kc1xo6s<2gO0G!BV0e})Riu4%yZ6hhAC}zwCh)t+AA(g~zNhlF;0f3xa}DFN46e*$1a0f}Lb)-&B2AcN@15}_FY&Jww~ z9Mo)3BIwTIh5Ae*4$3of&C1LPmL9XbK(NJujHq5?_>dO}wqGT_u@^|T#KgDY1(M?n z4!`IHvYTJ>0@=nn)#D!T9XJ9jf@^6kVM<`AW0)6+k_ny>;)*v zR9}%8>%)W-CGb&n!q4G!Psy^=fXUFLahyPL)LaaZy_j!ZJ_CZ5>h}3uBW}e3vS*^5 zklzS{x~12dHN+!oj5x4^yV#S8JdpB6N4LnHh&ZQSV-%QGhJRw*=m^tsQ6mztn@9o7 zITIBFfqJXfjAeNJc35S2$*Fd_QE6p({Xz0`oEgg)tA~t9pdoD4g4#JzBNj8NK~%4t zq1PB*e^Jb=s;@L+8PTfhkTEF}`9$c`y#6u9oCY&i70>W`96@0-lB-(=$jBXrA=Jo! zjFBQ~nNS=I;b5=FUtm^!7fUFnN25j+@aO4ual_*;3XPoP%d4-etI#76BL*@;wc$7j z$AJT9C@3Mn6`Bzs_>hPs4a*6Hnb?OxMyXMOgFx{~KE(@WM0Kk+Zs=fkY7C*fGFoHI zsP>R9VAunb{}7NRNsvG_=%8U>|COQ%ozTQiXppCobVL4uNOBGliYh}>RD~R$X+8+a znTw^7^CV3ZZP%x0iYk-a2StMrkxawVBo+(QG}6wJ;!{*PrI*w?ASQlH@j-~mK1d)vhoHtnq>*zhO~Z&>%ov(LPG<~FO4%~C4lI)sCBsMBtg$rG zM2?{ehy*)5RuD*#GBjD`)*&L98w&-Q;}cYJ&|~Cj0*gga1eN7e6ijZw)L2Eun4MRV zRkFKNd{EFhdnmF@E-4hBqS(Ks(=-+G>lH+DxMlbRnbWh3IX)?#iuAT*;yHy#_LZ}$m^UmpRCEOo}nspaRfW_ds!h30x5Y=mC4W9CIr=KK^v6|?q0Q04L;f+`ok z2x{cyM6C@WiJW~In!>LGBYquN5jlARc_EgOCrG3~LC+yVa*APSA}Q!FG?mmq#Q*Q^I)z9gCbIb0Z9{JP5^7NlnuU{Wh$^A W3)W+neV$S@MaG_i14oX_^ZXwz)~25T diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2docbook.pl b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2docbook.pl deleted file mode 100755 index ac7b698..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2docbook.pl +++ /dev/null @@ -1,270 +0,0 @@ -#!/usr/bin/perl - -use strict; -use XML::Writer; -use vars qw($writer $section_has_contents $VERSION); - -use constant DEBUG => 0; - -$VERSION = '2.0'; - -sub debug { - if ( DEBUG ) - { - print STDERR @_; - } -} - -sub start_docbook { - $writer = XML::Writer->new(DATA_MODE => 1, - DATA_INDENT => 1); - - debug(' 'x$writer->getDataIndent(), "starting new docbook\n"); - - $writer->xmlDecl(); - -# my $system = '/usr/share/sgml/docbook/xml-dtd-4.1/docbookx.dtd'; - my $system = 'http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd'; - - $writer->doctype('article', - '-//OASIS//DTD DocBook XML V4.1//EN', - $system); -} - -sub start_article { - my $id = shift; - - debug(' 'x$writer->getDataIndent(), "starting new article\n"); - - my @attributes = ( - 'class' => 'whitepaper', - ); - - if ( $id ) - { - push @attributes, ( 'id' => $id ); - } - - $writer->startTag('article', @attributes); -} - -sub start_section { - my $title = shift; - - debug(' 'x$writer->getDataIndent(), "starting new section\n"); - - $writer->startTag('section'); - - $section_has_contents = 0; - - if ( $title ) - { - $writer->dataElement('title', $title); - } -} - -sub start_list { - debug(' 'x$writer->getDataIndent(), "starting new list\n"); - - $writer->startTag('itemizedlist'); -} - -sub append_list_item { - my $text = shift; - - debug(' 'x$writer->getDataIndent(), "starting new listitem\n"); - - $writer->startTag('listitem'); - - $writer->dataElement('para', $text); - - $writer->endTag('listitem'); -} - -sub end_list { - $writer->endTag('itemizedlist'); - - debug(' 'x$writer->getDataIndent(), "ending list\n"); -} - -sub append_code { - my $code = shift; - - debug(' 'x$writer->getDataIndent(), "starting new programlisting\n"); - - $section_has_contents = 1; - - $writer->dataElement('programlisting', $code, role=>'C'); -} - -sub append_para { - my $text = shift; - - debug(' 'x$writer->getDataIndent(), "starting new para\n"); - - $section_has_contents = 1; - - $writer->dataElement('para', $text); -} - -sub end_section { - if ( ! $section_has_contents ) - { - $writer->emptyTag('para'); - $section_has_contents = 1; - } - - $writer->endTag('section'); - - debug(' 'x$writer->getDataIndent(), "ending section\n"); -} - -sub end_article { - $writer->endTag('article'); - - debug(' 'x$writer->getDataIndent(), "ending article\n"); -} - -sub end_docbook { - $writer->end(); - - debug(' 'x$writer->getDataIndent(), "ending docbook\n"); -} - -#################################################### - -start_docbook(); -start_article(); - -my $section_level = 0; -my $line; -my $para = ''; -my $list_mode = 0; -my $code_mode = 0; -my $first_line = 1; - -sub list_done { - if ( $list_mode ) { - end_list(); - $list_mode = 0; - } -} - -sub para_done { - if ( $para ) - { - chomp $para; - if ( $code_mode ) - { - append_code($para); - $code_mode = 0; - } - elsif ( $list_mode ) - { - append_list_item($para); - } - else - { - append_para($para); - } - } - $para = ''; -} - -while ( defined ($line = <>) ) -{ - if ( $first_line and $line =~ /^-\*-/ ) - { - next; - } - $first_line = 0; - - if ( $line =~ /^\t*\* (.*)/ ) - { - para_done(); - - $para = $1; - - if ( ! $list_mode ) - { - start_list(); - $list_mode = 1; - } - - next; - } - - if ( $line =~ /^\t*[^\t: ]/ ) - { - para_done(); - list_done(); - } - - if ( $line =~ /^(\t*)([^\t\n: ].*)/ ) - { - my $title = $2; - my $new_section_level = length($1) + 1; - - para_done(); - list_done(); - - for ( my $i = 0 ; $section_level - $new_section_level >= $i ; $i++ ) - { - end_section(); - } - - chomp $title; - start_section($title); - - $section_level = $new_section_level; - next; - } - -# Code mode not supported yet -# if ( ! $list_mode and $line =~ /^\s+/ ) -# { -# debug("enabling code mode\n"); -# $code_mode = 1; -# } - - $line =~ s/^\t*(\: ?| )//; - if ($line =~ /^$/) { - para_done(); - list_done(); - next; - } - $para .= $line; -} -para_done(); - -for ( my $i = 0 ; $section_level > $i ; $i++ ) -{ - end_section(); -} - -end_article(); -end_docbook(); - -__END__ - -=head1 NAME - -outline2dockbook - Generate DocBook XML from VimOutliner outline - -=head1 SYNOPSIS - -outline2docbook < input > output - -=head1 DESCRIPTION - -B reads an VimOutliner outline-mode type text file on -standard input and outputs DocBook XML on standard output. - -The original version was written by Thomas R. Fullhart to convert from Emacs -outline mode. It is available at -http://genetikayos.com/code/repos/outline2docbook/distribution/. - -This program uses the B perl module, which is available -on B. - -=cut diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html.py b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html.py deleted file mode 100755 index 61be3cf..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html.py +++ /dev/null @@ -1,1111 +0,0 @@ -#!/usr/bin/python2 -# otl2html.py -# convert a tab-formatted outline from VIM to HTML -# -# Copyright 2001 Noel Henson All rights reserved -# -# ALPHA VERSION!!! - -########################################################################### -# Basic function -# -# This program accepts text outline files and converts them -# to HTML. The outline levels are indicated by tabs. A line with no -# tabs is assumed to be part of the highest outline level. -# -# 10 outline levels are supported. These loosely correspond to the -# HTML H1 through H9 tags. Alphabetic, numeric and bullet formats -# are also supported. -# -# CSS support has been added. -# - -########################################################################### -# include whatever mdules we need - -import sys -import re -import os -import time - -########################################################################### -# global variables - -formatMode = "indent" -copyright = "" -level = 0 -div = 0 -silentdiv = 0 -slides = 0 -hideComments = 0 -showTitle = 1 -inputFile = "" -outline = [] -flatoutline = [] -inBodyText = 0 # 0: no, 1: text, 2: preformatted text, 3: table -styleSheet = "nnnnnn.css" -inlineStyle = 0 - -########################################################################### -# function definitions - -# usage -# print the simplest form of help -# input: none -# output: simple command usage is printed on the console - - -def showUsage(): - print """ - Usage: - otl2html.py [options] inputfile > outputfile - Options - -p Presentation: slide show output for use with - HtmlSlides. - -D First-level is divisions (

) for making - pretty web pages. - -s sheet Use the specified style sheet with a link. This is the - default. - -S sheet Include the specified style sheet in-line the - output. For encapsulated style. - -T The first line is not the title. Treat it as - outline data - -c comments (line with [ as the first non-whitespace - character. Ending with ] is optional. - -C copyright Override the internal copyright notice with the - one supplied in the quoted string following this - flag. Single or double quotes can be used. - -H Show the file syntax help. - output is on STDOUT - Note: if neither -s or -S are specified, otl2html.py will default - to -s. It will try to use the css file 'nnnnnn.css' if it - exists. If it does not exist, it will be created automatically. - """ - - -def showSyntax(): - print """ - Syntax - Syntax is Vim Outliner's normal syntax. The following are supported: - - Text - : Body text marker. This text will wrap in the output. - ; Preformmated text. This text will will not wrap. - - Tables - || Table header line. - | Table and table columns. Example: - || Name | Age | Animal | - | Kirby | 9 | Dog | - | Sparky | 1 | Bird | - | Sophia | 8 | Cat | - This will cause an item to be left-justified. - | whatever | - This will cause an item to be right-justified. - | whatever | - This will cause an item to be centered. - | whatever | - This will cause an item to be default aligned. - | whatever | - - Character Styles - ** Bold. Example: **Bold Text** - // Italic. Example: //Italic Text// - +++ Highlight. Example: +++Highlight Text+++ - --- Strikeout. Example: ---Strikeout Text--- - Insane ---+++//**Wow! This is insane!**//+++--- - Just remember to keep it all on one line. - Horizontal Rule - ---------------------------------------- (40 dashes). - Copyright - (c) or (C) Converts to a standard copyright symbol. - - Including Images (for web pages) - [imagename] Examples: - [logo.gif] [photo.jpg] [car.png] - [http://i.a.cnn.net/cnn/.element/img/1.1/logo/logl.gif] - or from a database: - [http://www.lab.com/php/image.php?id=4] - - Including links (for web pages) - [link text-or-image] Examples: - [about.html About] [http://www.cnn.com CNN] - or with an image: - [http://www.ted.com [http://www.ted.com/logo.png]] - Links starting with a '+' will be opened in a new - window. Eg. [+about.html About] - - Including external files - !filename! Examples: - !file.txt! - - Including external outlines (first line is parent) - !!filename!! Examples: - !!menu.otl!! - - Including output from executing external programs - !!!program args!!! Examples: - !!!date +%Y%m%d!!! - - Note: - When using -D, the top-level headings become divisions (
) - and will be created using a class of the heading name. Spaces - are not allowed. If a top-level heading begins with '_', it - will not be shown but the division name will be the same as - without the '_'. Example: _Menu will have a division name of - Menu and will not be shown. - """ - - -# getArgs -# Check for input arguments and set the necessary switches -# input: none -# output: possible console output for help, switch variables may be set -def getArgs(): - global inputFile, debug, formatMode, slides, hideComments, copyright, \ - styleSheet, inlineStyle, div, showTitle - if (len(sys.argv) == 1): - showUsage() - sys.exit()() - else: - for i in range(len(sys.argv)): - if (i != 0): - if (sys.argv[i] == "-d"): - debug = 1 # test for debug flag - elif (sys.argv[i] == "-?"): # test for help flag - showUsage() # show the help - sys.exit() # exit - elif (sys.argv[i] == "-p"): # test for the slides flag - slides = 1 # set the slides flag - elif (sys.argv[i] == "-D"): # test for the divisions flag - div = 1 # set the divisions flag - elif (sys.argv[i] == "-T"): # test for the no-title flag - showTitle = 0 # clear the show-title flag - elif (sys.argv[i] == "-c"): # test for the comments flag - hideComments = 1 # set the comments flag - elif (sys.argv[i] == "-C"): # test for the copyright flag - copyright = sys.argv[i + 1] # get the copyright - i = i + 1 # increment the pointer - elif (sys.argv[i] == "-s"): # test for the style sheet flag - styleSheet = sys.argv[i + 1] # get the style sheet name - formatMode = "indent" # set the format - i = i + 1 # increment the pointer - elif (sys.argv[i] == "-S"): # test for the style sheet flag - styleSheet = sys.argv[i + 1] # get the style sheet name - formatMode = "indent" # set the format - inlineStyle = 1 - i = i + 1 # increment the pointer - elif (sys.argv[i] == "--help"): - showUsage() - sys.exit() - elif (sys.argv[i] == "-h"): - showUsage() - sys.exit() - elif (sys.argv[i] == "-H"): - showSyntax() - sys.exit() - elif (sys.argv[i][0] == "-"): - print "Error! Unknown option. Aborting" - sys.exit() - else: # get the input file name - inputFile = sys.argv[i] - - -# getLineLevel -# get the level of the current line (count the number of tabs) -# input: linein - a single line that may or may not have tabs at the beginning -# output: returns a number 1 is the lowest -def getLineLevel(linein): - strstart = linein.lstrip() # find the start of text in line - x = linein.find(strstart) # find the text index in the line - n = linein.count("\t", 0, x) # count the tabs - return(n + 1) # return the count + 1 (for level) - - -# getLineTextLevel -# get the level of the current line (count the number of tabs) -# input: linein - a single line that may or may not have tabs at the -# beginning -# output: returns a number 1 is the lowest -def getLineTextLevel(linein): - strstart = linein.lstrip() # find the start of text in line - x = linein.find(strstart) # find the text index in the line - n = linein.count("\t", 0, x) # count the tabs - n = n + linein.count(" ", 0, x) # count the spaces - return(n + 1) # return the count + 1 (for level) - - -# colonStrip(line) -# stip a leading ':', if it exists -# input: line -# output: returns a string with a stipped ':' -def colonStrip(line): - if (line[0] == ":"): - return line[1:].lstrip() - else: - return line - - -# semicolonStrip(line) -# stip a leading ';', if it exists -# input: line -# output: returns a string with a stipped ';' -def semicolonStrip(line): - if (line[0] == ";"): - return line[1:] - else: - return line - - -# dashStrip(line) -# stip a leading '-', if it exists -# input: line -# output: returns a string with a stipped '-' -def dashStrip(line): - if (line[0] == "-"): - return line[1:] - else: - return line - - -# pipeStrip(line) -# stip a leading '|', if it exists -# input: line -# output: returns a string with a stipped '|' -def pipeStrip(line): - if (line[0] == "|"): - return line[1:] - else: - return line - - -# plusStrip(line) -# stip a leading '+', if it exists -# input: line -# output: returns a string with a stipped '+' -def plusStrip(line): - if (line[0] == "+"): - return line[1:] - else: - return line - - -# handleBodyText -# print body text lines with a class indicating level, if style sheets -# are being used. otherwise print just

-# input: linein - a single line that may or may not have tabs at the beginning -# output: through standard out -def handleBodyText(linein, lineLevel): - global inBodyText - if (inBodyText == 2): - print "" - if (inBodyText == 3): - print "" - print "" + colonStrip(linein.strip()), - - -# handlePreformattedText -# print preformatted text lines with a class indicating level, if style sheets -# are being used. otherwise print just

-# input: linein - a single line that may or may not have tabs at the beginning
-# output: through standard out
-def handlePreformattedText(linein, lineLevel):
-    global inBodyText
-    if (inBodyText == 1):
-        print "

" - if (inBodyText == 3): - print "" - print "" + semicolonStrip(linein.strip()), - - -# isAlignRight -# return flag -# input: coldata, a string -def isAlignRight(coldata): - l = len(coldata) - if (coldata[0:2] == " ") and (coldata[l - 2:l] != " "): - return 1 - else: - return 0 - - -# isAlignLeft -# return flag -# input: coldata, a string -def isAlignLeft(coldata): - l = len(coldata) - if (coldata[0:2] != " ") and (coldata[l - 2:l] == " "): - return 1 - else: - return 0 - - -# isAlignCenter -# return flag -# input: coldata, a string -def isAlignCenter(coldata): - l = len(coldata) - if (coldata[0:2] == " ") and (coldata[l - 2:l] == " "): - return 1 - else: - return 0 - - -# getColumnAlignment(string) -# return string -# input: coldata -# output: -# or or or -def getColumnAlignment(coldata): - if isAlignCenter(coldata): - return '' - if isAlignRight(coldata): - return '' - if isAlignLeft(coldata): - return '' - return '' - - -# handleTableColumns -# return the souce for a row's columns -# input: linein - a single line that may or may not have tabs at the beginning -# output: string with the columns' source -def handleTableColumns(linein, lineLevel): - out = "" - coldata = linein.strip() - coldata = coldata.split("|") - for i in range(1, len(coldata) - 1): - out += getColumnAlignment(coldata[i]) - out += coldata[i].strip() + '' - return out - - -# handleTableHeaders -# return the souce for a row's headers -# input: linein - a single line that may or may not have tabs at the beginning -# output: string with the columns' source -def handleTableHeaders(linein, lineLevel): - out = "" - coldata = linein.strip() - coldata = coldata.split("|") - for i in range(2, len(coldata) - 1): - out += getColumnAlignment(coldata[i]) - out += coldata[i].strip() + '' - out = out.replace(' tag if necessary -# input: linein - a single line that may or may not have tabs at the beginning -# output: through standard out -def handleTable(linein, lineLevel): - global inBodyText - if (inBodyText == 1): - print "

" - if (inBodyText == 2): - print "
" - if (inBodyText != 3): - print "" - inBodyText = 3 - print handleTableRow(linein, lineLevel), - - -# linkOrImage -# if there is a link to an image or another page, process it -# input: line -# output: modified line -def linkOrImage(line): - line = re.sub('\[(\S+?)\]', '\\1', line) - line = re.sub('\[(\S+)\s(.*?)\]', '\\2', line) - line = re.sub('(', '\\1\\2" target=_new>', line) - line = line.replace('X', '[X]') - line = line.replace('_', '[_]') - return line - - -# tabs -# return a string with 'count' tabs -# input: count -# output: string of tabs -def tabs(count): - out = "" - if (count == 0): - return "" - for i in range(0, count - 1): - out = out + "\t" - return out - - -# includeFile -# include the specified file, if it exists -# input: line and lineLevel -# output: line is replaced by the contents of the file -def includeFile(line, lineLevel): - filename = re.sub('!(\S+?)!', '\\1', line.strip()) - incfile = open(filename, "r") - linein = incfile.readline() - while linein != "": - linein = re.sub('^', tabs(lineLevel), linein) - processLine(linein) - linein = incfile.readline() - incfile.close() - return - - -# includeOutline -# include the specified file, if it exists -# input: line and lineLevel -# output: line is replaced by the contents of the file -def includeOutline(line, lineLevel): - filename = re.sub('!!(\S+?)!!', '\\1', line.strip()) - incfile = open(filename, "r") - linein = incfile.readline() - linein = re.sub('^', tabs(lineLevel), linein) - processLine(linein) - linein = incfile.readline() - while linein != "": - linein = re.sub('^', tabs(lineLevel + 1), linein) - processLine(linein) - linein = incfile.readline() - incfile.close() - return - - -# execProgram -# execute the specified program -# input: line -# output: program specified is replaced by program output -def execProgram(line): - program = re.sub('.*!!!(.*)!!!.*', '\\1', line.strip()) - child = os.popen(program) - out = child.read() - err = child.close() - out = re.sub('!!!(.*)!!!', out, line) - processLine(out) - if err: - raise RuntimeError('%s failed w/ exit code %d' % (program, err)) - return - - -# divName -# create a name for a division -# input: line -# output: division name -def divName(line): - global silentdiv - line = line.strip() - if (line[0] == '_'): - silentdiv = 1 - line = line[1:] - line = line.replace(' ', '_') - return'
' - - -# getTitleText(line) -# extract some meaningful text to make the document title from the line -# input: line -# output: modified line -def getTitleText(line): - out = re.sub('.*#(.*)#.*', '\\1', line) - out = re.sub('<.*>', '', out) -# if (out != ""): out = re.sub('\"(.*?)\"', '\\1', line) - return(out) - - -# stripTitleText(line) -# strip the title text if it is enclosed in double-quotes -# input: line -# output: modified line -def stripTitleText(line): - out = re.sub('#\W*.*#', '', line) - return(out) - - -# beautifyLine(line) -# do some optional, simple beautification of the text in a line -# input: line -# output: modified line -def beautifyLine(line): - if (line.strip() == "-" * 40): - return "


" - - out = line - line = "" - - while (line != out): - line = out - # out = replace(out, '---', '', 1) - if (line[0].lstrip() != ";"): - out = re.sub('\-\-\-(.*?)\-\-\-', '\\1', out) - out = linkOrImage(out) - # out = replace(out, '**', '', 1) - out = re.sub('\*\*(.*?)\*\*', '\\1', out) - # out = replace(out, '//', '', 1) - out = re.sub('\/\/(.*?)\/\/', '\\1', out) - # out = replace(out, '+++', '', 1) - out = re.sub('\+\+\+(.*?)\+\+\+', '\\1', out) - out = re.sub('\(c\)', '©', out) - out = re.sub('\(C\)', '©', out) - return out - - -# closeLevels -# generate the number of or tags necessary to proplerly finish -# input: format - a string indicating the mode to use for formatting -# level - an integer between 1 and 9 that show the current level -# (not to be confused with the level of the current line) -# output: through standard out -def closeLevels(): - global level, formatMode - while (level > 0): - if (formatMode == "bullets"): - print "" - if (formatMode == "alpha") or (formatMode == "numeric") or \ - (formatMode == "roman") or (formatMode == "indent"): - print "" - - level = level - 1 - - -# processLine -# process a single line -# input: linein - a single line that may or may not have tabs at the beginning -# format - a string indicating the mode to use for formatting -# level - an integer between 1 and 9 that show the current level -# (not to be confused with the level of the current line) -# output: through standard out -def processLine(linein): - global level, formatMode, slides, hideComments, inBodyText, styleSheet, \ - inlineStyle, div, silentdiv - if (linein.lstrip() == ""): - return - linein = beautifyLine(linein) - lineLevel = getLineLevel(linein) - if ((hideComments == 0) or (lineLevel != linein.find("[") + 1)): - - if (lineLevel > level): # increasing depth - while (lineLevel > level): - if (formatMode == "indent" or formatMode == "simple"): - if (inBodyText == 1): - print"

" - inBodyText = 0 - elif (inBodyText == 2): - print"" - inBodyText = 0 - elif (inBodyText == 3): - print"
" - inBodyText = 0 - if not (div == 1 and lineLevel == 1): - print "
    " - else: - sys.exit("Error! Unknown formatMode type") - level = level + 1 - - elif (lineLevel < level): # decreasing depth - while (lineLevel < level): - if (inBodyText == 1): - print"

    " - inBodyText = 0 - elif (inBodyText == 2): - print"" - inBodyText = 0 - elif (inBodyText == 3): - print"" - inBodyText = 0 - print "
" - level = level - 1 - if (div == 1 and level == 1): - if (silentdiv == 0): - print'' - else: - silentdiv = 0 - print'
' - - else: - print # same depth - if (div == 1 and lineLevel == 1): - if (lineLevel != linein.find("!") + 1): - print divName(linein) - if (silentdiv == 0): - print "
    " - - if (slides == 0): - if (lineLevel == linein.find(" ") + 1) or \ - (lineLevel == linein.find(":") + 1): - if (inBodyText != 1): - handleBodyText(linein, lineLevel) - elif (colonStrip(linein.strip()) == ""): - print "

    " - handleBodyText(linein, lineLevel) - else: - print colonStrip(linein.strip()), - elif (lineLevel == linein.find(";") + 1): - if (inBodyText != 2): - handlePreformattedText(linein, lineLevel) - elif (semicolonStrip(linein.strip()) == ""): - print "" - handlePreformattedText(linein, lineLevel) - else: - print semicolonStrip(linein.strip()), - elif (lineLevel == linein.find("|") + 1): - if (inBodyText != 3): - handleTable(linein, lineLevel) - elif (pipeStrip(linein.strip()) == ""): - print "" - handleTable(linein, lineLevel) - else: - print handleTableRow(linein, lineLevel), - elif (lineLevel == linein.find("!!!") + 1): - execProgram(linein) - elif (lineLevel == linein.find("!!") + 1): - includeOutline(linein, lineLevel) - elif (lineLevel == linein.find("!") + 1): - includeFile(linein, lineLevel) - else: - if (inBodyText == 1): - print"

    " - inBodyText = 0 - elif (inBodyText == 2): - print"" - inBodyText = 0 - elif (inBodyText == 3): - print"" - inBodyText = 0 - if (silentdiv == 0): - print "" + \ - dashStrip(linein.strip()), - elif (lineLevel == linein.find("+ ") + 1): - print " class=\"LN" + str(lineLevel) + "\"", - print ">" + \ - plusStrip(linein.strip()), - else: - print " class=\"L" + str(lineLevel) + "\"", - print ">" + linein.strip(), - else: - silentdiv = 0 - else: - if (lineLevel == 1): - if (linein[0] == " "): - if (inBodyText == 0): - handleBodyText(linein, lineLevel) - else: - print linein.strip(), - else: - print "
    " - print linein.strip(), - print "
    \n" - else: - if (lineLevel == linein.find(" ") + 1) or \ - (lineLevel == linein.find(":") + 1): - if (inBodyText == 0): - handleBodyText(linein, lineLevel) - else: - print linein.strip(), - else: - if (inBodyText == 1): - print"

    " - inBodyText = 0 - print "" + linein.strip(), - - -# flatten -# Flatten a subsection of an outline. The index passed is the -# outline section title. All sublevels that are only one level -# deeper are indcluded in the current subsection. Then there is -# a recursion for those items listed in the subsection. Exits -# when the next line to be processed is of the same or lower -# outline level. (lower means shallower) -# input: idx - the index into the outline. The indexed line is the title. -# output: adds reformatted lines to flatoutline[] -def flatten(idx): - if (outline[idx] == ""): - return - if (len(outline) <= idx): - return - titleline = outline[idx] - titlelevel = getLineLevel(titleline) - if (getLineLevel(outline[idx + 1]) > titlelevel): - if (titleline[titlelevel - 1] != " "): - flatoutline.append(titleline.lstrip()) - exitflag = 0 - while (exitflag == 0): - if (idx < len(outline) - 1): - idx = idx + 1 - currlevel = getLineLevel(outline[idx]) - if (currlevel == titlelevel + 1): - if (currlevel == outline[idx].find(" ") + 1): - flatoutline.append("\t " + outline[idx].lstrip()) - else: - flatoutline.append("\t" + outline[idx].lstrip()) - elif (currlevel <= titlelevel): - exitflag = 1 - else: - exitflag = 1 - # level = titlelevel # FIXME level assigned but never used - return - - -def createCSS(): - global styleSheet - output = """ /* copyright notice and filename */ - body { - font-family: helvetica, arial, sans-serif; - font-size: 10pt; - } - /* title at the top of the page */ - H1 { - font-family: helvetica, arial, sans-serif; - font-size: 14pt; - font-weight: bold; - text-align: center; - color: black; - background-color: #ddddee; - padding-top: 20px; - padding-bottom: 20px; - } - H2 { - font-family: helvetica, arial, sans-serif; - font-size: 12pt; - font-weight: bold; - text-align: left; - color: black; - } - H3 { - font-family: helvetica, arial, sans-serif; - font-size: 12pt; - text-align: left; - color: black; - } - H4 { - font-family: helvetica, arial, sans-serif; - font-size: 12pt; - text-align: left; - color: black; - } - H5 { - font-family: helvetica, arial, sans-serif; - font-size: 10pt; - text-align: left; - color: black; - } - /* outline level spacing */ - OL { - margin-left: 1.0em; - padding-left: 0; - padding-bottom: 8pt; - } - /* global heading settings */ - LI { - font-family: helvetica, arial, sans-serif; - color: black; - font-weight: normal; - list-style: lower-alpha; - padding-top: 4px; - } - /* level 1 heading overrides */ - LI.L1 { - font-size: 12pt; - font-weight: bold; - list-style: none; - } - /* level 2 heading overrides */ - LI.L2 { - font-size: 10pt; - font-weight: bold; - list-style: none; - } - /* level 3 heading overrides */ - LI.L3 { - font-size: 10pt; - list-style: none; - } - /* level 4 heading overrides */ - LI.L4 { - font-size: 10pt; - list-style: none; - } - /* level 5 heading overrides */ - LI.L5 { - font-size: 10pt; - list-style: none; - } - /* level 6 heading overrides */ - LI.L6 { - font-size: 10pt; - list-style: none; - } - /* level 7 heading overrides */ - LI.L7 { - font-size: 10pt; - list-style: none; - } - /* level 1 bullet heading overrides */ - LI.LB1 { - font-size: 12pt; - font-weight: bold; - list-style: disc; - } - /* level 2 bullet heading overrides */ - LI.LB2 { - font-size: 10pt; - font-weight: bold; - list-style: disc; - } - /* level 3 bullet heading overrides */ - LI.LB3 { - font-size: 10pt; - list-style: disc; - } - /* level 4 bullet heading overrides */ - LI.LB4 { - font-size: 10pt; - list-style: disc; - } - /* level 5 bullet heading overrides */ - LI.LB5 { - font-size: 10pt; - list-style: disc; - } - /* level 6 bullet heading overrides */ - LI.LB6 { - font-size: 10pt; - list-style: disc; - } - /* level 7 bullet heading overrides */ - LI.LB7 { - font-size: 10pt; - list-style: disc; - } - /* level 1 numeric heading overrides */ - LI.LN1 { - font-size: 12pt; - font-weight: bold; - list-style: decimal; - } - /* level 2 numeric heading overrides */ - LI.LN2 { - font-size: 10pt; - font-weight: bold; - list-style: decimal; - } - /* level 3 numeric heading overrides */ - LI.LN3 { - font-size: 10pt; - list-style: decimal; - } - /* level 4 numeric heading overrides */ - LI.LN4 { - font-size: 10pt; - list-style: decimal; - } - /* level 5 numeric heading overrides */ - LI.LN5 { - font-size: 10pt; - list-style: decimal; - } - /* level 6 numeric heading overrides */ - LI.LN6 { - font-size: 10pt; - list-style: decimal; - } - /* level 7 numeric heading overrides */ - LI.LN7 { - font-size: 10pt; - list-style: decimal; - } - /* body text */ - P { - font-family: helvetica, arial, sans-serif; - font-size: 9pt; - font-weight: normal; - color: darkgreen; - } - /* preformatted text */ - PRE { - font-family: fixed, monospace; - font-size: 9pt; - font-weight: normal; - color: darkblue; - } - - TABLE { - margin-top: 1em; - font-family: helvetica, arial, sans-serif; - font-size: 12pt; - font-weight: normal; - border-collapse: collapse; - } - - TH { - border: 1px solid black; - padding: 0.5em; - background-color: #eeddee; - } - - TD { - border: 1px solid black; - padding: 0.5em; - background-color: #ddeeee; - } - - CODE { - background-color: yellow; - } - - TABLE.TAB1 { - margin-top: 1em; - font-family: helvetica, arial, sans-serif; - font-size: 12pt; - font-weight: normal; - border-collapse: collapse; - } - TABLE.TAB2 { - margin-top: 1em; - font-family: helvetica, arial, sans-serif; - font-size: 11pt; - font-weight: normal; - border-collapse: collapse; - } - TABLE.TAB3 { - margin-top: 1em; - font-family: helvetica, arial, sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; - } - TABLE.TAB4 { - margin-top: 1em; - font-family: helvetica, arial, sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; - } - TABLE.TAB5 { - margin-top: 1em; - font-family: helvetica, arial, sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; - } - TABLE.TAB6 { - margin-top: 1em; - font-family: helvetica, arial, sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; - """ - file = open(styleSheet, "w") - file.write(output) - - -def printHeader(linein): - global styleSheet, inlineStyle - print """ - """ + getTitleText(linein) + "" - try: - file = open(styleSheet, "r") - except IOError: - createCSS() - file = open(styleSheet, "r") - if (styleSheet != "" and inlineStyle == 0): - print "" - if (styleSheet != "" and inlineStyle == 1): - print "" - print "" - - -def printFirstLine(linein): - print '''
    -

    %s

    -
    -
    ''' % stripTitleText(linein.strip()) - - -def printFooter(): - global slides, div - print "
    " - if (slides == 0 and div == 0): - print "
    " - print "
    " - print copyright - print "
    " - print inputFile + "   " + \ - time.strftime("%Y/%m/%d %H:%M", time.localtime(time.time())) - print "
    " - print "" - - -def main(): - global showTitle - getArgs() - file = open(inputFile, "r") - if (slides == 0): - firstLine = beautifyLine(file.readline().strip()) - printHeader(firstLine) - if (showTitle == 1): - printFirstLine(firstLine) - linein = beautifyLine(file.readline().strip()) - else: - linein = firstLine - while linein != "": - processLine(linein) - linein = file.readline() - closeLevels() - else: - linein = beautifyLine(file.readline().strip()) - outline.append(linein) - linein = file.readline().strip() - while linein != "": - outline.append("\t" + linein) - linein = file.readline().rstrip() - for i in range(0, len(outline) - 1): - flatten(i) - printHeader(flatoutline[0]) - for i in range(0, len(flatoutline)): - processLine(flatoutline[i]) - - printFooter() - file.close() - - -if __name__ == "__main__": - main() diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html_autonumbered.css b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html_autonumbered.css deleted file mode 100644 index ddc8830..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html_autonumbered.css +++ /dev/null @@ -1,269 +0,0 @@ - /* copyright notice and filename */ -body { - font-family: helvetica,arial,sans-serif; - font-size: 10pt; -} - /* title at the top of the page */ -H1 { - font-family: helvetica,arial,sans-serif; - font-size: 14pt; - font-weight: bold; - text-align: center; - color: black; - background-color: #ddddee; - padding-top: 20px; - padding-bottom: 20px; -} -H2 { - font-family: helvetica,arial,sans-serif; - font-size: 12pt; - font-weight: bold; - text-align: left; - color: black; -} -H3 { - font-family: helvetica,arial,sans-serif; - font-size: 12pt; - text-align: left; - color: black; -} -H4 { - font-family: helvetica,arial,sans-serif; - font-size: 12pt; - text-align: left; - color: black; -} -H5 { - font-family: helvetica,arial,sans-serif; - font-size: 10pt; - text-align: left; - color: black; -} - /* outline level spacing */ -OL { - padding-bottom: 8pt; - counter-reset: section; - margin-left: 1.0em; - padding-left:0 ; -} -OL LI { counter-increment: section; } -OL LI:before { content: counters(section, ".") ". "; } - /* global heading settings */ -LI { - font-family: helvetica,arial,sans-serif; - color: black; - font-weight: normal; - list-style: lower-alpha; - padding-top: 4px; -} - /* level 1 heading overrides */ -LI.L1 { - font-size: 12pt; - font-weight: bold; - list-style: none; -} - /* level 2 heading overrides */ -LI.L2 { - font-size: 10pt; - font-weight: bold; - list-style: none; -} - /* level 3 heading overrides */ -LI.L3 { - font-size: 10pt; - list-style: none; -} - /* level 4 heading overrides */ -LI.L4 { - font-size: 10pt; - list-style: none; -} - /* level 5 heading overrides */ -LI.L5 { - font-size: 10pt; - list-style: none; -} - /* level 6 heading overrides */ -LI.L6 { - font-size: 10pt; - list-style: none; -} - /* level 7 heading overrides */ -LI.L7 { - font-size: 10pt; - list-style: none; -} - /* level 8 heading overrides */ -LI.L8 { - font-size: 10pt; - list-style: none; -} - /* level 9 heading overrides */ -LI.L9 { - font-size: 10pt; - list-style: none; -} - /* level 10 heading overrides */ -LI.L10 { - font-size: 10pt; - list-style: none; -} - /* level 11 heading overrides */ -LI.L11 { - font-size: 10pt; - list-style: none; -} - /* level 1 bullet heading overrides */ -LI.LB1 { - font-size: 12pt; - font-weight: bold; - list-style: disc; -} - /* level 2 bullet heading overrides */ -LI.LB2 { - font-size: 10pt; - font-weight: bold; - list-style: disc; -} - /* level 3 bullet heading overrides */ -LI.LB3 { - font-size: 10pt; - list-style: disc; -} - /* level 4 bullet heading overrides */ -LI.LB4 { - font-size: 10pt; - list-style: disc; -} - /* level 5 bullet heading overrides */ -LI.LB5 { - font-size: 10pt; - list-style: disc; -} - /* level 6 bullet heading overrides */ -LI.LB6 { - font-size: 10pt; - list-style: disc; -} - /* level 7 bullet heading overrides */ -LI.LB7 { - font-size: 10pt; - list-style: disc; -} - /* level 1 numeric heading overrides */ -LI.LN1 { - font-size: 12pt; - font-weight: bold; - list-style: decimal; -} - /* level 2 numeric heading overrides */ -LI.LN2 { - font-size: 10pt; - font-weight: bold; - list-style: decimal; -} - /* level 3 numeric heading overrides */ -LI.LN3 { - font-size: 10pt; - list-style: decimal; -} - /* level 4 numeric heading overrides */ -LI.LN4 { - font-size: 10pt; - list-style: decimal; -} - /* level 5 numeric heading overrides */ -LI.LN5 { - font-size: 10pt; - list-style: decimal; -} - /* level 6 numeric heading overrides */ -LI.LN6 { - font-size: 10pt; - list-style: decimal; -} - /* level 7 numeric heading overrides */ -LI.LN7 { - font-size: 10pt; - list-style: decimal; -} - /* body text */ -P { - font-family: helvetica,arial,sans-serif; - font-size: 9pt; - font-weight: normal; - color: black; -} - /* preformatted text */ -PRE { - font-family: fixed,monospace; - font-size: 9pt; - font-weight: normal; - color: darkblue; -} - -TABLE { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 12pt; - font-weight: normal; - border-collapse: collapse; -} - -TH { - border: 1px solid black; - padding: 0.5em; - background-color: #eeddee; -} - -TD { - border: 1px solid black; - padding: 0.5em; - background-color: #ddeeee; -} - -CODE { - background-color: yellow; -} - -TABLE.TAB1 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 12pt; - font-weight: normal; - border-collapse: collapse; -} -TABLE.TAB2 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 11pt; - font-weight: normal; - border-collapse: collapse; -} -TABLE.TAB3 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; -} -TABLE.TAB4 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; -} -TABLE.TAB5 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; -} -TABLE.TAB6 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html_nnnnnn.css b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html_nnnnnn.css deleted file mode 100644 index 7405843..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2html_nnnnnn.css +++ /dev/null @@ -1,246 +0,0 @@ - /* copyright notice and filename */ -body { - font-family: helvetica,arial,sans-serif; - font-size: 10pt; -} - /* title at the top of the page */ -H1 { - font-family: helvetica,arial,sans-serif; - font-size: 14pt; - font-weight: bold; - text-align: center; - color: black; - background-color: #ddddee; - padding-top: 20px; - padding-bottom: 20px; -} -H2 { - font-family: helvetica,arial,sans-serif; - font-size: 12pt; - font-weight: bold; - text-align: left; - color: black; -} -H3 { - font-family: helvetica,arial,sans-serif; - font-size: 12pt; - text-align: left; - color: black; -} -H4 { - font-family: helvetica,arial,sans-serif; - font-size: 12pt; - text-align: left; - color: black; -} -H5 { - font-family: helvetica,arial,sans-serif; - font-size: 10pt; - text-align: left; - color: black; -} - /* outline level spacing */ -OL { - margin-left: 1.0em; - padding-left: 0; - padding-bottom: 8pt; -} - /* global heading settings */ -LI { - font-family: helvetica,arial,sans-serif; - color: black; - font-weight: normal; - list-style: lower-alpha; - padding-top: 4px; -} - /* level 1 heading overrides */ -LI.L1 { - font-size: 12pt; - font-weight: bold; - list-style: none; -} - /* level 2 heading overrides */ -LI.L2 { - font-size: 10pt; - font-weight: bold; - list-style: none; -} - /* level 3 heading overrides */ -LI.L3 { - font-size: 10pt; - list-style: none; -} - /* level 4 heading overrides */ -LI.L4 { - font-size: 10pt; - list-style: none; -} - /* level 5 heading overrides */ -LI.L5 { - font-size: 10pt; - list-style: none; -} - /* level 6 heading overrides */ -LI.L6 { - font-size: 10pt; - list-style: none; -} - /* level 7 heading overrides */ -LI.L7 { - font-size: 10pt; - list-style: none; -} - /* level 1 bullet heading overrides */ -LI.LB1 { - font-size: 12pt; - font-weight: bold; - list-style: disc; -} - /* level 2 bullet heading overrides */ -LI.LB2 { - font-size: 10pt; - font-weight: bold; - list-style: disc; -} - /* level 3 bullet heading overrides */ -LI.LB3 { - font-size: 10pt; - list-style: disc; -} - /* level 4 bullet heading overrides */ -LI.LB4 { - font-size: 10pt; - list-style: disc; -} - /* level 5 bullet heading overrides */ -LI.LB5 { - font-size: 10pt; - list-style: disc; -} - /* level 6 bullet heading overrides */ -LI.LB6 { - font-size: 10pt; - list-style: disc; -} - /* level 7 bullet heading overrides */ -LI.LB7 { - font-size: 10pt; - list-style: disc; -} - /* level 1 numeric heading overrides */ -LI.LN1 { - font-size: 12pt; - font-weight: bold; - list-style: decimal; -} - /* level 2 numeric heading overrides */ -LI.LN2 { - font-size: 10pt; - font-weight: bold; - list-style: decimal; -} - /* level 3 numeric heading overrides */ -LI.LN3 { - font-size: 10pt; - list-style: decimal; -} - /* level 4 numeric heading overrides */ -LI.LN4 { - font-size: 10pt; - list-style: decimal; -} - /* level 5 numeric heading overrides */ -LI.LN5 { - font-size: 10pt; - list-style: decimal; -} - /* level 6 numeric heading overrides */ -LI.LN6 { - font-size: 10pt; - list-style: decimal; -} - /* level 7 numeric heading overrides */ -LI.LN7 { - font-size: 10pt; - list-style: decimal; -} - /* body text */ -P { - font-family: helvetica,arial,sans-serif; - font-size: 9pt; - font-weight: normal; - color: darkgreen; -} - /* preformatted text */ -PRE { - font-family: fixed,monospace; - font-size: 9pt; - font-weight: normal; - color: darkblue; -} - -TABLE { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 12pt; - font-weight: normal; - border-collapse: collapse; -} - -TH { - border: 1px solid black; - padding: 0.5em; - background-color: #eeddee; -} - -TD { - border: 1px solid black; - padding: 0.5em; - background-color: #ddeeee; -} - -CODE { - background-color: yellow; -} - -TABLE.TAB1 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 12pt; - font-weight: normal; - border-collapse: collapse; -} -TABLE.TAB2 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 11pt; - font-weight: normal; - border-collapse: collapse; -} -TABLE.TAB3 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; -} -TABLE.TAB4 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; -} -TABLE.TAB5 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; -} -TABLE.TAB6 { - margin-top: 1em; - font-family: helvetica,arial,sans-serif; - font-size: 10pt; - font-weight: normal; - border-collapse: collapse; diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/.vimrc b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/.vimrc deleted file mode 100644 index d1675e5..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/.vimrc +++ /dev/null @@ -1,44 +0,0 @@ -" local .vimrc for working with otl2latex -" -" Used to write notes in vim outlier file (.otl) and have dynamically -" generated beamer-latex files produced. -" -" requires the script otl2latex.py is in the same directory as this script. -" also requires that your user ~/.vimrc file has "set exrc" specified -" -" This can be added to as more functionality is desired. -" -" Author: Serge Rey -" Last Revision: 2007-01-21 - -version 6.0 - -"get rid of blank lines -map ,n :g/^$/d - -"make the next paragraph a text block (in Vim Outliner terms) -map ,t ma}k^mb'a'bI| - -"make an itemized list out of the following contiguous lines (each line is an -"item) -map ,i ^ma}k^mb'a'bI\item 'aObegin{itemize}'aki\'bo\end{itemize} - -"make an itemized list out of the following contiguous lines (each line is an -"item) and then mark block as otl text -map ,I ^ma}k^mb'a'bI\item 'aObegin{itemize}'aki\'bo\end{itemize}'akma}k^mb'a'bI| - -map ,f ^Obegin{center}jo\end{center}k^i\includegraphics[width=.8\linewidth]{A}k^i\^jjmbkk'bI| - -"process the otl file to produce a pdf presentation -map ,b :!python otl2latex.py -p % %<.tex;pdflatex %<.tex  - -"pdflatex the current buffer -map ,p :!pdflatex % - -"set up menus -amenu o&2l.&process,b ,b -amenu o&2l.&delete\ blank\ lines,n ,n -amenu o2l.-Sep- : -amenu o&2l.&itemize,i ,i -amenu o&2l.&textualize,t ,t -amenu o&2l.&itemize_and_textualize,t ,I diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/README b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/README deleted file mode 100644 index eb96167..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/README +++ /dev/null @@ -1,23 +0,0 @@ -otl2latex - -Translate a Vim Outliner file to a LaTeX document. - -Author: Serge Rey -Version 0.1 (2007-01-21) - -REQUIREMENTS - The Vim Outliner http://bike-nomad.com/vim/vimoutliner.html - beamer http://latex-beamer.sourceforge.net/ - Python http://www.python.org - - -INSTRUCTIONS -The user's guide is in otl2latex.pdf - -To reproduce it: - python otl2latex.py -p otl2latex.otl otl2latex.tex - pdflatex otl2latex - -DEVELOPMENT - otl2latex development is hosted at: - http://http://code.google.com/p/otl2latex/ diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.otl b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.otl deleted file mode 100644 index 3333e9f..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.otl +++ /dev/null @@ -1,95 +0,0 @@ -preamble - @author Serge Rey - @institute sjsrey@gmail.com - @instituteShort sjsrey@gmail.com - @title otl2latex - @subtitle User's Guide - @titleShort http://code.google.com/p/otl2latex/ - @date November 3, 2007 - @dateShort otl2latex -Introduction - What is otl2latex? - Translator - otl to tex - |otl2latex allows you to - |* prepare your document in a powerful outliner - |* generate \LaTeX\ markup of your content - Requirements - Operating Systems - Operating Systems Supported - |otl2latex has been used successfully on - |* Linux - |* Mac OS X - |* Windows - Software Required - Packages and Programs - |* Python http://www.python.org - |* \LaTeX - |* Beamer http://latex-beamer.sourceforge.net/ - |* The Vim Outliner http://bike-nomad.com/vim/vimoutliner.html -Usage - Basics - Usage - From the command line - | \texttt{python otl2latex.py -p filename.otl filename.tex} - | - Notes - |* \texttt{filename.tex} will be generated, you don't edit that one. - |* You can run all this from withing Vim (see Vim Mappings below). - Basics - Presentations/Beamer - |* Level 1 in the outline become sections - |* Level 2 in the outline become subsections - |* Level 3 in the outline become frame titles - |* Level 4 in the outline become block titles - |* Text in the outline is treated as \LaTeX\ markup - Using Bullets - | Placing a '*' at the begining of a line will tell otl2latex to begin an itemize list. otl2latex currently supports 3 levels of Itemization. - |* First Level - |** Second Level - |*** Third Level - |** Second Level - Advanced - Tips - |* Level 4 can be omitted - |* You will have no blocks on that frame - Vim mappings - Vim Mappings: .vimrc - Processing - |* ,b will generate a pdf file from your outline - |* ,nb will remove all empty lines in your otl file - |* ,p will run the current vim buffer through pdflatex - Vim Mappings: .vimrc - Lists - |* ,i on the first line will create an itemized list of a block of lines - |* ,t will mark a block as otl text - |* ,I itemize and mark block as otl text - |You need to have a blank line at the end of the block to apply these. - Vim Mappings: .vimrc - Figures - |\begin{itemize} - |\item ,f (insert mode) will generate stub for figures - |\end{itemize} - A figure - | \begin{center} - | \includegraphics[width=.8\linewidth]{otl2latex.png} - | \end{center} - A figure - |\begin{center} - |\includegraphics[width=.8\linewidth]{otl2latex.png} - |\end{center} - Future Extensions - Move to vim script - .vimrc to otl2latex.vim - |\begin{itemize} - |\item Currently we are just embedding mappings in .vimrc - |\item Ok for testing, not very polished for end user - |\end{itemize} - Reverse Engineering - latex2otl - |\begin{itemize} - |\item take a tex file - |\item generate the otl file - |\end{itemize} - - diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.pdf b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.pdf deleted file mode 100644 index 1c4d56a6cd3b60294e817fe90c0ac604eb6cc59f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102839 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�k&5d&YGSe+k$Yk2`MOexh%7BF`r6 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 Mvu&H2t~$^E0Y|6Z_5c6? diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.png b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.png deleted file mode 100644 index a1622baafb6b44b023792fd090f38d0ebfb7f71f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42112 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 -Version 0.1 (2007-01-21) -""" - -import os,sys - -class Line: - """Class for markup lines""" - def __init__(self, content): - ntabs=content.count("\t") - content=content.lstrip("\t") - level = ntabs - content.count("\t") - self.level=level - self.content = content - self.markup=0 - if content[0]=="|": - self.markup=1 - -#3 lines added here - self.bullet=0 - if len(content) > 2 and (content[2]=='*' or content[1]=='*'): - self.bullet=1 - #print "%d: %s"%(self.bullet,content) - -class Manager: - """Abstract class for LaTeX document classes""" - def __init__(self, content, fileOut): - self.content=content - self.fileOut=open(fileOut,'w') - self.parse() - self.fileOut.write(self.markup) - self.fileOut.close() - def parse(self): - self.lines=[ Line(line) for line in self.content] - preambleStart=0 - nl=len(self.lines) - id=zip(range(nl),self.lines) - level1=[i for i,line in id if line.level==0] - preambleEnd=level1[1] - preamble=self.lines[0:preambleEnd] - self.level1=level1 - preambleMarkup=[] - for line in preamble: - if line.content.count("@"): - tmp=line.content.split("@")[1] - tmp=tmp.split() - env=tmp[0] - content=" ".join(tmp[1:]) - mu="\\%s{%s}"%(env,content) - preambleMarkup.append(mu) - self.preamble=preambleMarkup - self.preambleLines=preamble - self.documentLines=self.lines[preambleEnd:] - - - - - -class Beamer(Manager): - """Manager for Beamer document class""" - def __init__(self, content,fileOut): - self.top1=""" -\documentclass[nototal,handout]{beamer} -\mode -{ - \usetheme{Madrid} - \setbeamercovered{transparent} -} - -\usepackage{verbatim} -\usepackage{fancyvrb} -\usepackage[english]{babel} -\usepackage[latin1]{inputenc} -\usepackage{times} -\usepackage{tikz} -\usepackage[T1]{fontenc} -\usepackage{graphicx} %sjr added -\graphicspath{{figures/}} -\usepackage{hyperref}""" - self.top2=""" -% Delete this, if you do not want the table of contents to pop up at -% the beginning of each subsection: -\AtBeginSubsection[] -{ - \\begin{frame} - \\frametitle{Outline} - \\tableofcontents[currentsection,currentsubsection] - \end{frame} -} - - -% If you wish to uncover everything in a step-wise fashion, uncomment -% the following command: -\\beamerdefaultoverlayspecification{<+->} -\\begin{document} -\\begin{frame} - \\titlepage -\end{frame} -\\begin{frame} - \\frametitle{Outline} - \\tableofcontents[pausesections] - % You might wish to add the option [pausesections] -\end{frame} -""" - self.bulletLevel = 0 - Manager.__init__(self, content, fileOut) - - def itemize(self,line): - nstars=line.content.count("*") - content=line.content.lstrip("|").lstrip().lstrip("*") - self.currentBLevel = nstars - content.count("*") - stuff=[] - if self.currentBLevel == self.bulletLevel and line.bullet: - mu='\\item '+line.content.lstrip("|").lstrip().lstrip("*") - elif line.bullet and self.currentBLevel > self.bulletLevel: - self.bulletLevel += 1 - stuff.append("\\begin{itemize}\n") - mu='\\item '+line.content.lstrip("|").lstrip().lstrip("*") - elif self.currentBLevel < self.bulletLevel and line.bullet: - self.bulletLevel -= 1 - stuff.append("\\end{itemize}\n") - mu='\\item '+line.content.lstrip("|").lstrip().lstrip("*") - elif self.currentBLevel < self.bulletLevel: - self.bulletLevel -= 1 - stuff.append("\\end{itemize}\n") - mu=line.content.lstrip("|") - else: - panic() - return stuff,mu - - def parse(self): - Manager.parse(self) - #print self.content - #print self.lines - #print self.level1 - #for info in self.preamble: - # print info - - # do my own preamble - field=("author ","instituteShort ","dateShort ","date ","subtitle ", - "title ", "institute ", "titleShort ") - pattern=["@"+token for token in field] - f=zip(field,pattern) - d={} - for field,pattern in f: - t=[line.content for line in self.preambleLines if line.content.count(pattern)] - if t: - d[field]= t[0].split(pattern)[1].strip() - else: - d[field]="" - preamble="\n\n\\author{%s}\n"%d['author '] - preamble+="\\institute[%s]{%s}\n"%(d['instituteShort '],d['institute ']) - preamble+="\\title[%s]{%s}\n"%(d['titleShort '],d['title ']) - preamble+="\\subtitle{%s}\n"%(d['subtitle ']) - preamble+="\\date[%s]{%s}\n"%(d['dateShort '],d['date ']) - - print self.preamble - self.preamble=preamble - - - body=[] - prev=0 - frameOpen=0 - blockOpen=0 - frameCount=0 - blockCount=0 - - for line in self.documentLines: - if line.level==0: - for i in range(0,self.bulletLevel): - self.bulletLevel -= 1 - body.append("\\end{itemize}\n") - if blockOpen: - body.append("\\end{block}") - blockOpen=0 - if frameOpen: - body.append("\\end{frame}") - frameOpen=0 - mu="\n\n\n\\section{%s}"%line.content.strip() - elif line.level==1: - for i in range(0,self.bulletLevel): - self.bulletLevel -= 1 - body.append("\\end{itemize}\n") - if blockOpen: - body.append("\\end{block}") - blockOpen=0 - if frameOpen: - body.append("\\end{frame}") - frameOpen=0 - mu="\n\n\\subsection{%s}"%line.content.strip() - elif line.level==2: - # check if this frame has blocks or is nonblocked - if line.markup: - if line.bullet or self.bulletLevel: - stuff,mu=self.itemize(line) - if len(stuff) > 0: - for i in stuff: - body.append(i) - else: - mu=line.content.lstrip("|") - else: - for i in range(0,self.bulletLevel): - self.bulletLevel -= 1 - body.append("\\end{itemize}\n") - if blockOpen: - body.append("\\end{block}") - blockOpen=0 - if frameOpen: - body.append("\\end{frame}") - else: - frameOpen=1 - # check for verbatim here - tmp=line.content.strip() - if tmp.count("@vb"): - tmp=tmp.split("@")[0] - mu="\n\n\\begin{frame}[containsverbatim]\n\t\\frametitle{%s}\n"%tmp - else: - mu="\n\n\\begin{frame}\n\t\\frametitle{%s}\n"%tmp - frameCount+=1 - elif line.level==3: - # check if it is a block or body content - if line.markup: - if line.bullet or self.bulletLevel: - stuff,mu=self.itemize(line) - if len(stuff) > 0: - for i in stuff: - body.append(i) - else: - mu=line.content.lstrip("\t") - mu=mu.lstrip("|") - else: - for i in range(0,self.bulletLevel): - self.bulletLevel -= 1 - body.append("\\end{itemize}\n") - #block title - if blockOpen: - body.append("\\end{block}") - else: - blockOpen=1 - mu="\n\\begin{block}{%s}\n"%line.content.strip() - blockCount+=1 - else: - mu="" - body.append(mu) - for i in range(0,self.bulletLevel): - self.bulletLevel -= 1 - body.append("\\end{itemize}\n") - if blockOpen: - body.append("\\end{block}") - if frameOpen: - body.append("\\end{frame}") - - self.body=" ".join(body) - self.markup=self.top1+self.preamble+self.top2 - self.markup+=self.body - self.markup+="\n\\end{document}\n" - print self.markup - -# Process command line arguments -args = sys.argv -nargs=len(args) -dispatch={} -dispatch['beamer']=Beamer -inputFileName=None -outputFileName=None - -def printUsage(): - print usage - sys.exit() - -if nargs==1: - printUsage() -else: - docType='beamer' - options=args[1] - if options.count("-"): - if options.count("a"): - docType='article' - elif options.count("b"): - docType='book' - if nargs==2: - printUsage() - elif nargs==3: - inputFileName=args[2] - elif nargs==4: - inputFileName=args[2] - outputFileName=args[3] - else: - printUsage() - elif nargs==2: - inputFileName=args[1] - elif nargs==3: - inputFileName=args[1] - outputFileName=args[3] - else: - printUsage() - # Dispatch to correct document class manager - fin=open(inputFileName,'r') - content=fin.readlines() - fin.close() - dispatch[docType](content,outputFileName) diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.tex b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.tex deleted file mode 100644 index 31f4766..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.tex +++ /dev/null @@ -1,223 +0,0 @@ - -\documentclass[nototal,handout]{beamer} -\mode -{ - \usetheme{Madrid} - \setbeamercovered{transparent} -} - -\usepackage{verbatim} -\usepackage{fancyvrb} -\usepackage[english]{babel} -\usepackage[latin1]{inputenc} -\usepackage{times} -\usepackage{tikz} -\usepackage[T1]{fontenc} -\usepackage{graphicx} %sjr added -\graphicspath{{figures/}} -\usepackage{hyperref} - -\author{Serge Rey} -\institute[sjsrey@gmail.com]{sjsrey@gmail.com} -\title[http://code.google.com/p/otl2latex/]{otl2latex} -\subtitle{User's Guide} -\date[otl2latex]{November 3, 2007} - -% Delete this, if you do not want the table of contents to pop up at -% the beginning of each subsection: -\AtBeginSubsection[] -{ - \begin{frame} - \frametitle{Outline} - \tableofcontents[currentsection,currentsubsection] - \end{frame} -} - - -% If you wish to uncover everything in a step-wise fashion, uncomment -% the following command: -\beamerdefaultoverlayspecification{<+->} -\begin{document} -\begin{frame} - \titlepage -\end{frame} -\begin{frame} - \frametitle{Outline} - \tableofcontents[pausesections] - % You might wish to add the option [pausesections] -\end{frame} - - - -\section{Introduction} - -\subsection{What is otl2latex?} - -\begin{frame} - \frametitle{Translator} - -\begin{block}{otl to tex} - otl2latex allows you to - \begin{itemize} - \item prepare your document in a powerful outliner - \item generate \LaTeX\ markup of your content - \end{itemize} - \end{block} \end{frame} - -\subsection{Requirements} - -\begin{frame} - \frametitle{Operating Systems} - -\begin{block}{Operating Systems Supported} - otl2latex has been used successfully on - \begin{itemize} - \item Linux - \item Mac OS X - \item Windows - \end{itemize} - \end{block} \end{frame} - -\begin{frame} - \frametitle{Software Required} - -\begin{block}{Packages and Programs} - \begin{itemize} - \item Python http://www.python.org - \item \LaTeX - \item Beamer http://latex-beamer.sourceforge.net/ - \item The Vim Outliner http://bike-nomad.com/vim/vimoutliner.html - \end{itemize} - \end{block} \end{frame} - - -\section{Usage} - -\subsection{Basics} - -\begin{frame} - \frametitle{Usage} - -\begin{block}{From the command line} - \texttt{python otl2latex.py -p filename.otl filename.tex} - - \end{block} -\begin{block}{Notes} - \begin{itemize} - \item \texttt{filename.tex} will be generated, you don't edit that one. - \item You can run all this from withing Vim (see Vim Mappings below). - \end{itemize} - \end{block} \end{frame} - -\begin{frame} - \frametitle{Basics} - -\begin{block}{Presentations/Beamer} - \begin{itemize} - \item Level 1 in the outline become sections - \item Level 2 in the outline become subsections - \item Level 3 in the outline become frame titles - \item Level 4 in the outline become block titles - \item Text in the outline is treated as \LaTeX\ markup - \end{itemize} - \end{block} -\begin{block}{Using Bullets} - Placing a '*' at the begining of a line will tell otl2latex to begin an itemize list. otl2latex currently supports 3 levels of Itemization. - \begin{itemize} - \item First Level - \begin{itemize} - \item Second Level - \begin{itemize} - \item Third Level - \end{itemize} - \item Second Level - \end{itemize} - \end{itemize} - \end{block} \end{frame} - -\begin{frame} - \frametitle{Advanced} - -\begin{block}{Tips} - \begin{itemize} - \item Level 4 can be omitted - \item You will have no blocks on that frame - \end{itemize} - \end{block} \end{frame} - -\subsection{Vim mappings} - -\begin{frame} - \frametitle{Vim Mappings: .vimrc} - -\begin{block}{Processing} - \begin{itemize} - \item ,b will generate a pdf file from your outline - \item ,nb will remove all empty lines in your otl file - \item ,p will run the current vim buffer through pdflatex - \end{itemize} - \end{block} \end{frame} - -\begin{frame} - \frametitle{Vim Mappings: .vimrc} - -\begin{block}{Lists} - \begin{itemize} - \item ,i on the first line will create an itemized list of a block of lines - \item ,t will mark a block as otl text - \item ,I itemize and mark block as otl text - \end{itemize} - You need to have a blank line at the end of the block to apply these. - \end{block} \end{frame} - -\begin{frame} - \frametitle{Vim Mappings: .vimrc} - -\begin{block}{Figures} - \begin{itemize} - \item ,f (insert mode) will generate stub for figures - \end{itemize} - \end{block} \end{frame} - -\begin{frame} - \frametitle{A figure} - \begin{center} - \includegraphics[width=.8\linewidth]{otl2latex.png} - \end{center} - \end{frame} - -\begin{frame} - \frametitle{A figure} - \begin{center} - \includegraphics[width=.8\linewidth]{otl2latex.png} - \end{center} - \end{frame} - -\subsection{Future Extensions} - -\begin{frame} - \frametitle{Move to vim script} - -\begin{block}{.vimrc to otl2latex.vim} - \begin{itemize} - \item Currently we are just embedding mappings in .vimrc - \item Ok for testing, not very polished for end user - \end{itemize} - \end{block} \end{frame} - -\begin{frame} - \frametitle{Reverse Engineering} - -\begin{block}{latex2otl} - \begin{itemize} - \item take a tex file - \item generate the otl file - \end{itemize} - \end{block} \end{frame} - - -\section{} - - -\section{} -\end{document} diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.toc b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.toc deleted file mode 100644 index ae333f6..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2latex/otl2latex.toc +++ /dev/null @@ -1,9 +0,0 @@ -\beamer@endinputifotherversion {3.07pt} -\select@language {english} -\beamer@sectionintoc {1}{Introduction}{3}{0}{1} -\beamer@subsectionintoc {1}{1}{What is otl2latex?}{3}{0}{1} -\beamer@subsectionintoc {1}{2}{Requirements}{4}{0}{1} -\beamer@sectionintoc {2}{Usage}{6}{0}{2} -\beamer@subsectionintoc {2}{1}{Basics}{6}{0}{2} -\beamer@subsectionintoc {2}{2}{Vim mappings}{9}{0}{2} -\beamer@subsectionintoc {2}{3}{Future Extensions}{14}{0}{2} diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2lyx.awk b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2lyx.awk deleted file mode 100644 index cc6e381..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2lyx.awk +++ /dev/null @@ -1,149 +0,0 @@ -#!/usr/bin/gawk -f - -# Copyright (C) 2007 by Steve Litt, all rights reserved. -# Licensed under the GNU General Public License, version 2. -# otl2lyx.awk version 0.1.1 pre-alpha -# 4/23/2007 -# Fixed insertion of other environments at bodytext to bodytext -# borders. -# -# USAGE: ./otl2lyx level-environment-table-file outline-file -# -# level-table-structure: -# 1: Top-level-environment-name -# 2: 2nd-level-environment-name -# 3: 3rd-level-environment-name -# 4: 4th-level-environment-name -# 5: 5th-level-environment-name -# 6: 6th-level-environment-name -# bodytext: environment-name-for-normal-text -# -# Example for a book: -# 1: Chapter -# 2: Section -# 3: Subsection -# 4: Subsubsection -# 5: Paragraph -# 6: Subparagraph -# 7: Garbage7 -# bodytext: Standard - - -BEGIN{ - FS=":[ \t]*" - OFS="\x09" - lastinbodytext=0 -} - -### BLOW OFF BLANKS OUTSIDE OF BODY TEXT -$0~/^[ \t]*$/ && inbodytext==0{ - next -} - -### FILL THE ENVIRONMENTS ARRAY ### -ARGIND==1{ - FS=":[ \t]*"; - sub(/[ \t]*$/,"",$2); - environments[$1] = $2; - next; -} - -FNR==101{ - for(i in environments) print "level=" i ", string=" environments[i]; -} - -### FIELD SEPARATOR IS TAB ON THE OUTLINE FILE ### -{FS="\x09"; } - -### INCREMENT OUTLINE ID NUMBER -{ol_id++} - -### CALCULATE LEVEL ### -{ - for(i=1;i<=NF;i++) - if($i == ""){ - } else { - break - } - this["level"] = i - if(ol_id == ol_id_first) - this["level"]-- -} - -### FIGURE TEXT ### -{ - this["text"] = "" - for(i=1;i<=NF;i++){ - if($i != ""){ - if(this["text"] == ""){ - this["text"] = this["text"] $i - } else { - this["text"] = this["text"] " " $i - } - } - } - sub(/^[ \t]+/, "", this["text"]); - sub(/[ \t]+$/, "", this["text"]); -} - -### SET BODYTEXT FLAGS ### -{ inbodytext = 0; newbodytext = 0; endbodytext = 0; btblankline=0; } - - -this["text"] ~ /^:[ \t]+[^ \t]/{ - inbodytext = 1; - sub(/^:[ \t]*/, "", this["text"]); - this["text"] = this["text"] " "; -} - -this["text"] == "" || this["text"] == ":"{ - this["text"] = ""; - inbodytext = lastinbodytext; - if(inbodytext == 1){ - endbodytext = 1; - newbodytext = 1; - btblankline = 1; - } -} - -lastinbodytext == 1 && inbodytext == 0{ - endbodytext = 1; -} - -lastinbodytext == 0 && inbodytext == 1{ - newbodytext = 1; -} - -{ lastinbodytext = inbodytext; } - - - -### QUOTE SINGLE BACKSLASHES FOR LATEX ### -{gsub(/\\/,"\r\\backslash\r", this["text"]);} - -### PRINT LYX CONTENT ### - -endbodytext == 1{ - print "\\end_layout" - print "" -} -newbodytext == 1{ - print "\\begin_layout " environments["bodytext"] -} -inbodytext == 1{ - if(btblankline == 0) print this["text"] -} - -inbodytext == 0{ - print "\\begin_layout " environments[this["level"]] - print this["text"] - print "\\end_layout" - print "" -} - -END{ - if(inbodytext == 1){ - print "\\end_layout" - print "" - } -} diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2ooimpress.py b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2ooimpress.py deleted file mode 100755 index 7d3ab67..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2ooimpress.py +++ /dev/null @@ -1,263 +0,0 @@ -#!/usr/bin/python2 -# otl2ooimpress.py -# needs otl2ooimpress.sh to work in an automated way -############################################################################# -# -# Tool for Vim Outliner files to Open Office Impress files. -# Copyright (C) 2003 by Noel Henson, all rights reserved. -# -# This tool is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, see -# . -# -############################################################################# -# ALPHA VERSION!!! - -########################################################################### -# Basic function -# -# This program accepts VO outline files and converts them -# to the zipped XML files required by Open Office Impress. -# -# 10 outline levels are supported. These loosely correspond to the -# HTML H1 through H9 tags. -# - - -########################################################################### -# include whatever mdules we need - -import sys -########################################################################### -# global variables - -level = 0 -inputFile = "" -outline = [] -flatoutline = [] -pageNumber = 0 -inPage = 0 -debug = 0 - -########################################################################### -# function definitions - - -# usage -# print the simplest form of help -# input: none -# output: simple command usage is printed on the console -def showUsage(): - print - print "Usage:" - print "otl2ooimpress.py [options] inputfile > outputfile" - print "" - print "output is on STDOUT" - print - - -# getArgs -# Check for input arguments and set the necessary switches -# input: none -# output: possible console output for help, switch variables may be set -def getArgs(): - global inputfile, debug - if (len(sys.argv) == 1): - showUsage() - sys.exit()() - else: - for i in range(len(sys.argv)): - if (i != 0): - if (sys.argv[i] == "-d"): - debug = 1 # test for debug flag - elif (sys.argv[i] == "-?"): # test for help flag - showUsage() # show the help - sys.exit() # exit - elif (sys.argv[i] == "--help"): - showUsage() - sys.exit() - elif (sys.argv[i] == "-h"): - showUsage() - sys.exit() - elif (sys.argv[i][0] == "-"): - print "Error! Unknown option. Aborting" - sys.exit() - else: # get the input file name - inputfile = sys.argv[i] - - -# getLineLevel -# get the level of the current line (count the number of tabs) -# input: linein - a single line that may or may not have tabs at the beginning -# output: returns a number 1 is the lowest -def getLineLevel(linein): - strstart = linein.lstrip() # find the start of text in line - x = linein.find(strstart) # find the text index in the line - n = linein.count("\t", 0, x) # count the tabs - return(n + 1) # return the count + 1 (for level) - - -# getLineTextLevel -# get the level of the current line (count the number of tabs) -# input: linein - a single line that may or may not have tabs at the beginning -# output: returns a number 1 is the lowest -def getLineTextLevel(linein): - strstart = linein.lstrip() # find the start of text in line - x = linein.find(strstart) # find the text index in the line - n = linein.count("\t", 0, x) # count the tabs - n = n + linein.count(" ", 0, x) # count the spaces - return(n + 1) # return the count + 1 (for level) - - -# colonStrip(line) -# stip a leading ':', if it exists -# input: line -# output: returns a string with a stipped ':' -def colonStrip(line): - if (line[0] == ":"): - return line[1:].lstrip() - else: - return line - - -# processLine -# process a single line -# input: linein - a single line that may or may not have tabs at the beginning -# level - an integer between 1 and 9 that show the current level -# (not to be confused with the level of the current line) -# output: through standard out -def processLine(linein): - global inPage, pageNumber - if (linein.lstrip() == ""): - print - return - if (getLineLevel(linein) == 1): - if (inPage == 1): - print '' - inPage = 0 - pageNumber += 1 - outstring = '' - print outstring - outstring = '' - print outstring - outstring = '' - outstring += linein.lstrip() - outstring += "" - print outstring - outstring = '' - print outstring - inPage = 1 - else: - outstring = '' - outstring += linein.lstrip() - outstring += '' - print outstring - - -# flatten -# Flatten a subsection of an outline. The index passed is the outline section -# title. All sublevels that are only one level deeper are indcluded in the -# current subsection. Then there is a recursion for those items listed in the -# subsection. Exits when the next line to be processed is of the same or lower -# outline level. -# (lower means shallower) -# input: idx - the index into the outline. The indexed line is the title. -# output: adds reformatted lines to flatoutline[] -def flatten(idx): - if (outline[idx] == ""): - return - if (len(outline) <= idx): - return - titleline = outline[idx] - titlelevel = getLineLevel(titleline) - if (getLineLevel(outline[idx + 1]) > titlelevel): - if (titleline[titlelevel - 1] != " "): - flatoutline.append(titleline.lstrip()) - exitflag = 0 - while (exitflag == 0): - if (idx < len(outline) - 1): - idx = idx + 1 - currlevel = getLineLevel(outline[idx]) - if (currlevel == titlelevel + 1): - if (currlevel == outline[idx].find(" ") + 1): - flatoutline.append("\t " + outline[idx].lstrip()) - else: - flatoutline.append("\t" + outline[idx].lstrip()) - elif (currlevel <= titlelevel): - exitflag = 1 - else: - exitflag = 1 - return - - -def printHeader(linein): - print''' - - - - ''' - - -def printFooter(): - print '' - print'' - - -def main(): - getArgs() - file = open(inputFile, "r") - linein = file.readline().strip() - outline.append(linein) - linein = file.readline().strip() - while linein != "": - outline.append("\t" + linein) - linein = file.readline().rstrip() - for i in range(0, len(outline) - 1): - flatten(i) - - printHeader(flatoutline[0]) - for i in range(0, len(flatoutline)): - processLine(flatoutline[i]) - printFooter() - - file.close() - -main() diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2ooimpress.sh b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2ooimpress.sh deleted file mode 100755 index 9e2432d..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2ooimpress.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -# otl2ooimpress.sh -# needs otl2ooimpress.py to work at all -############################################################################# -# -# Tool for Vim Outliner files to Open Office Impress files. -# Copyright (C) 2003 by Noel Henson, all rights reserved. -# -# This tool is free software; you can redistribute it and/or -# modify it under the terms of the GNU Library General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Library General Public -# License along with this library; if not, see -# . -# -############################################################################# - -# Path to otl2ooimpress.py -MYPATH=$HOME/bin -# Path to rm -RMPATH=/bin -# Path to zip -ZIPPATH=/usr/bin - -$MYPATH/otl2ooimpress.py $1 > content.xml -$ZIPPATH/zip $1.sxi content.xml -$RMPATH/rm content.xml diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2table.py b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2table.py deleted file mode 100755 index 543792b..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl2table.py +++ /dev/null @@ -1,199 +0,0 @@ -#!/usr/bin/python2 -# otl2table.py -# convert a tab-formatted outline from VIM to tab-delimited table -# -# Copyright (c) 2004 Noel Henson All rights reserved -# -# ALPHA VERSION!!! - -########################################################################### -# Basic function -# -# This program accepts text outline files and converts them -# the tab-delimited text tables. -# This: -# Test -# Dog -# Barks -# Howls -# Cat -# Meows -# Yowls -# Becomes this: -# Test Dog Barks -# Test Dog Howls -# Test Cat Meows -# Test Cat Yowls -# -# This will make searching for groups of data and report generation easier. -# - - -########################################################################### -# include whatever mdules we need - -import sys -from string import * -#from time import * - -########################################################################### -# global variables - -level = 0 -inputFile = "" -formatMode = "tab" -noTrailing = 0 -columns = [] - -########################################################################### -# function definitions - -# usage -# print the simplest form of help -# input: none -# output: simple command usage is printed on the console - -def showUsage(): - print - print "Usage:" - print "otl2table.py [options] inputfile > outputfile" - print "Options" - print " -n Don't include trailing columns." - print " -t type Specify field separator type." - print " Types:" - print " tab - separate fields with tabs (default)" - print " csv - separate fields with ," - print " qcsv - separate fields with \",\"" - print " bullets - uses HTML tags \n$in\n" ); - } - $r->print( "\n" ); - } - $r->print( "\n\n" ); - } - - my $t1 = Time::HiRes::gettimeofday; - my $td = sprintf("%0.3f", $t1 - $t0); - $r->print("
    OTL parsed in $td secs
    \n") if $opt{timer}; - $r->print(< - -EHTML - - return OK; -} - -sub sorter -{ - my ($opt, $re) = @_; - return 0 unless $opt->{sorttype}; - my ($sa, $sb); - if ($opt->{sorttype} eq 'percent') { - $sa = $2 if $a =~ $re->{percent}; - $sb = $2 if $b =~ $re->{percent}; - return $opt->{sortrev} ? $sb <=> $sa : $sa <=> $sb; - } - else { - $sa = $1 if $a =~ $re->{linetext}; - $sb = $1 if $b =~ $re->{linetext}; - return $opt->{sortrev} ? $sb cmp $sa : $sa cmp $sb; - } -} - -1; - diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/README b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/README deleted file mode 100644 index ddc610d..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/README +++ /dev/null @@ -1,155 +0,0 @@ - - WHAT IS THIS? ---------------------------------------------------------------------- - -Vimoutliner already comes with some otl to HTML converters that work -quite well. I maintain a few different otl files, that are displayed -on a internal intranet - the step of converting to HTML on every little -change before upload was becoming mildly irritating, and countering my -near legendary laziness. - -This mod_perl handler teaches apache how to pretty print otl natively. - -Now, I can just edit the otl files directly - skip the conversion step -altogether, and let Apache make some delicious looking outlines. - - - INSTALLATION ---------------------------------------------------------------------- - -First of all, prerequisites! - - - apache2 - - mod_perl2 - - libapreq2 (Apache2::Request) - -Add the following lines in your httpd.conf, or in a -separate otl.conf in the apache Includes directory: - - ------------------------- - PerlSwitches -I/path/to/perl/libraries - PerlModule Apache::OTL - - - SetHandler perl-script - PerlResponseHandler Apache::OTL - - ------------------------- - -Doublecheck that your apreq2 module is setup to load, as well. - -That's it. Apache will now pretty-print all your otl files. - - - SETTINGS ---------------------------------------------------------------------- - -Settings for the otl_handler are stored on the first line of the otl -files themselves, prefixed by the 'user no wrap' character, '<'. See -the sample.otl for an example settings line. All settings are entirely -optional. - -title - Type: string - Default: filename - - The title of the OTL. Used as a header, and the html title. - If this is not set, the html title is derived from the filename. - - -style - Type: string - Default: none - - A path to css style(s). - Comma separated values load different files in order. - Media type defaults to 'screen', if the css name contains the - string 'print' anywhere, the media type is changed to print. - - :style=/css/otl_style.css,/css/print_style.css - -js - Type: string - Default: none - - Use javascript? If set, loads an external javascript library. - Comma separated values load diff files in order. - - -last_mod - Type: boolean - Default: 0 - - Show modification time of the otl file? - - -legend - Type: boolean - Default: 0 - - Display small legend for todo and done items? - - -sort - Type: boolean - Default: 0 - - Show sort links? - - -sorttype - Type: string - Default: none - - Default sorting method. Valid values are - percent - alpha - - -sortrev - Type: boolean - Default: 0 - - Should we default to reverse sorting? - - -counts - Type: boolean - Default: 0 - - Count and display sub items? - - -timer - Type: boolean - Default: 0 - - Display how long the parser took to generate the html? - - - - INCLUDED FILES ---------------------------------------------------------------------- - -/Apache/OTL.pm - The mod_perl content handler. - -/javascript/* - Example (but functional!) javascript. Create line numbers, - various eye candies, and clickable folds. - - This requires the 'jquery.js' library, also included. - -/sample.otl - An example vimoutliner file, with optional settings. - -/styles/* - "Theme" examples for customizing OTL display. - - - ACKNOWLEDGEMENTS ---------------------------------------------------------------------- - -Thanks to Nathan Dabney and -Michael Granger for their help and advice! - diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/devel-mode b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/devel-mode deleted file mode 100644 index f77cf6a..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/devel-mode +++ /dev/null @@ -1,5 +0,0 @@ -PerlModule Apache2::Reload -PerlInitHandler Apache2::Reload -PerlSetVar ReloadAll Off -PerlSetVar ReloadModules "Apache::OTL" -PerlSetVar ReloadConstantRedefineWarnings Off diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/javascript/jquery.js b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/javascript/jquery.js deleted file mode 100644 index 4384f4c..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/javascript/jquery.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - * jQuery 1.0.2 - New Wave Javascript - * - * Copyright (c) 2006 John Resig (jquery.com) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * $Date: 2006-10-09 20:23:18 -0400 (Mon, 09 Oct 2006) $ - * $Rev: 1b5eb968d2c4 $ - */ - -eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('l(1Y 1O.6=="P"){1O.P=1O.P;6=q(a,c){l(a&&1Y a=="q"&&6.C.1T)v 6(15).1T(a);a=a||6.1k||15;l(a.2J)v 6(6.1X(a,[]));l(c&&c.2J)v 6(c).2j(a);l(1O==7)v 1f 6(a,c);u m=/^[^<]*(<.+>)[^>]*$/.36(a);l(m)a=6.31([m[1]]);7.1o(a.N==2y||a.D&&!a.1S&&a[0]!=P&&a[0].1S?6.1X(a,[]):6.2j(a,c));u C=1d[1d.D-1];l(C&&1Y C=="q")7.U(C)};l(1Y $!="P")6.3W$=$;u $=6;6.C=6.89={2J:"1.0.2",4u:q(){v 7.D},1o:q(26){l(26&&26.N==2y){7.D=0;[].1l.17(7,26);v 7}F v 26==P?6.1X(7,[]):7[26]},U:q(C,1h){v 6.U(7,C,1h)},8b:q(16){u 2c=-1;7.U(q(i){l(7==16)2c=i});v 2c},1r:q(1P,W,B){v 1P.N!=1N||W!=P?7.U(q(){l(W==P)H(u I 1q 1P)6.1r(B?7.1a:7,I,1P[I]);F 6.1r(B?7.1a:7,1P,W)}):6[B||"1r"](7[0],1P)},1g:q(1P,W){v 7.1r(1P,W,"20")},2V:q(e){e=e||7;u t="";H(u j=0;j0:14},2K:q(1h,1p,2N,C){u 3G=7.4u()>1;u a=6.31(1h);v 7.U(q(){u 16=7;l(1p&&7.2x.2h()=="60"&&a[0].2x.2h()!="61"){u 25=7.4R("25");l(!25.D){16=15.4E("25");7.44(16)}F 16=25[0]}H(u i=(2N<0?a.D-1:0);i!=(2N<0?2N:a.D);i+=2N){C.17(16,[3G?a[i].3D(V):a[i]])}})},28:q(a,1h){u C=1h&&1h[1h.D-1];u 2i=1h&&1h[1h.D-2];l(C&&C.N!=1v)C=Q;l(2i&&2i.N!=1v)2i=Q;l(!C){l(!7.3d)7.3d=[];7.3d.1l(7.1o());7.1o(a)}F{u 1U=7.1o();7.1o(a);l(2i&&a.D||!2i)7.U(2i||C).1o(1U);F 7.1o(1U).U(C)}v 7}};6.1L=6.C.1L=q(16,I){l(!I){I=16;16=7}H(u i 1q I)16[i]=I[i];v 16};6.1L({5C:q(){6.63=V;6.U(6.2l.5u,q(i,n){6.C[i]=q(a){u K=6.2t(7,n);l(a&&a.N==1N)K=6.19(a,K).r;v 7.28(K,1d)}});6.U(6.2l.2q,q(i,n){6.C[i]=q(){u a=1d;v 7.U(q(){H(u j=0;j"}F l(!a[i].1c("<3v")){1p="3v";a[i]="<1p>"+a[i]+""}F l(!a[i].1c("<3M")||!a[i].1c("<6r")){1p="3M";a[i]="<1p><25><3v>"+a[i]+""}u 1F=15.4E("1F");1F.2u=a[i];l(1p){1F=1F.1M;l(1p!="4j")1F=1F.1M;l(1p=="3M")1F=1F.1M}H(u j=0;j<1F.2e.D;j++)r.1l(1F.2e[j])}F l(a[i].2J||a[i].D&&!a[i].1S)H(u k=0;km[3]-0",4J:"m[3]-0==i",5o:"m[3]-0==i",2f:"i==0",1R:"i==r.D-1",52:"i%2==0",53:"i%2","4J-32":"6.1x(a,m[3]).1m","2f-32":"6.1x(a,0).1m","1R-32":"6.1x(a,0).1R","6v-32":"6.1x(a).D==1",5v:"a.2e.D",5A:"!a.2e.D",5r:"(a.7L||a.2u).1c(m[3])>=0",6w:"a.B!=\'1V\'&&6.1g(a,\'1t\')!=\'21\'&&6.1g(a,\'4e\')!=\'1V\'",1V:"a.B==\'1V\'||6.1g(a,\'1t\')==\'21\'||6.1g(a,\'4e\')==\'1V\'",7I:"!a.2R",2R:"a.2R",34:"a.34",4f:"a.4f || 6.1r(a, \'4f\')",2V:"a.B==\'2V\'",5G:"a.B==\'5G\'",5H:"a.B==\'5H\'",4l:"a.B==\'4l\'",4L:"a.B==\'4L\'",4n:"a.B==\'4n\'",5I:"a.B==\'5I\'",4m:"a.B==\'4m\'",48:"a.B==\'48\'",5B:"a.2x.41().4U(/5B|5O|6C|48/)"},".":"6.1e.3l(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z && !z.1c(m[4])","$=":"z && z.2U(z.D - m[4].D,m[4].D)==m[4]","*=":"z && z.1c(m[4])>=0","":"z"},"[":"6.2j(m[2],a).D"},3j:["\\\\.\\\\.|/\\\\.\\\\.","a.1n",">|/","6.1x(a.1M)","\\\\+","6.1x(a).3p","~",q(a){u r=[];u s=6.1x(a);l(s.n>0)H(u i=s.n;i=1)t=t.2U(t.1c("/"),t.D)}u K=[1k];u 1J=[];u 1R=Q;2d(t.D>0&&1R!=t){u r=[];1R=t;t=6.2I(t).1A(/^\\/\\//i,"");u 3k=14;H(u i=0;i<6.3j.D;i+=2){l(3k)51;u 2o=1f 3T("^("+6.3j[i]+")");u m=2o.36(t);l(m){r=K=6.2t(K,6.3j[i+1]);t=6.2I(t.1A(2o,""));3k=V}}l(!3k){l(!t.1c(",")||!t.1c("|")){l(K[0]==1k)K.3O();1J=6.1X(1J,K);r=K=[1k];t=" "+t.2U(1,t.D)}F{u 3P=/^([#.]?)([a-4X-9\\\\*3W-]*)/i;u m=3P.36(t);l(m[1]=="#"){u 4q=15.5z(m[2]);r=K=4q?[4q]:[];t=t.1A(3P,"")}F{l(!m[2]||m[1]==".")m[2]="*";H(u i=0;i<\\/2b>");u 2b=15.5z("5V");2b.2A=q(){l(7.2Y!="1I")v;7.1n.3g(7);6.1T()};2b=Q}F l(6.18.3e){6.4r=3R(q(){l(15.2Y=="62"||15.2Y=="1I"){56(6.4r);6.4r=Q;6.1T()}},10)}6.L.1Z(1O,"2T",6.1T)};l(6.18.1y)6(1O).3J(q(){u L=6.L,1i=L.1i;H(u B 1q 1i){u 3H=1i[B],i=3H.D;l(i>0)68 l(B!=\'3J\')L.22(3H[i-1],B);2d(--i)}});6.C.1L({4z:6.C.1C,1C:q(11,G){v 11?7.1W({1z:"1C",27:"1C",1j:"1C"},11,G):7.4z()},5W:6.C.1s,1s:q(11,G){v 11?7.1W({1z:"1s",27:"1s",1j:"1s"},11,G):7.5W()},6h:q(11,G){v 7.1W({1z:"1C"},11,G)},6j:q(11,G){v 7.1W({1z:"1s"},11,G)},6k:q(11,G){v 7.U(q(){u 4B=6(7).4o(":1V")?"1C":"1s";6(7).1W({1z:4B},11,G)})},84:q(11,G){v 7.1W({1j:"1C"},11,G)},6n:q(11,G){v 7.1W({1j:"1s"},11,G)},6q:q(11,2q,G){v 7.1W({1j:2q},11,G)},1W:q(I,11,G){v 7.1w(q(){7.2P=I;H(u p 1q I){u e=1f 6.2O(7,6.11(11,G),p);l(I[p].N==4M)e.2M(e.1m(),I[p]);F e[I[p]](I)}})},1w:q(B,C){l(!C){C=B;B="2O"}v 7.U(q(){l(!7.1w)7.1w={};l(!7.1w[B])7.1w[B]=[];7.1w[B].1l(C);l(7.1w[B].D==1)C.17(7)})}});6.1L({5i:q(e,p){l(e.4K)v;l(p=="1z"&&e.4D!=3f(6.20(e,p)))v;l(p=="27"&&e.4F!=3f(6.20(e,p)))v;u a=e.1a[p];u o=6.20(e,p,1);l(p=="1z"&&e.4D!=o||p=="27"&&e.4F!=o)v;e.1a[p]=e.3t?"":"4I";u n=6.20(e,p,1);l(o!=n&&n!="4I"){e.1a[p]=a;e.4K=V}},11:q(s,o){o=o||{};l(o.N==1v)o={1I:o};u 4N={6x:6z,6A:4H};o.2F=(s&&s.N==4M?s:4N[s])||4S;o.3o=o.1I;o.1I=q(){6.4P(7,"2O");l(o.3o&&o.3o.N==1v)o.3o.17(7)};v o},1w:{},4P:q(E,B){B=B||"2O";l(E.1w&&E.1w[B]){E.1w[B].3O();u f=E.1w[B][0];l(f)f.17(E)}},2O:q(E,2m,I){u z=7;z.o={2F:2m.2F||4S,1I:2m.1I,2p:2m.2p};z.R=E;u y=z.R.1a;z.a=q(){l(2m.2p)2m.2p.17(E,[z.2a]);l(I=="1j")6.1r(y,"1j",z.2a);F l(3f(z.2a))y[I]=3f(z.2a)+"5f";y.1t="2Q"};z.57=q(){v 3Z(6.1g(z.R,I))};z.1m=q(){u r=3Z(6.20(z.R,I));v r&&r>-6R?r:z.57()};z.2M=q(4t,2q){z.42=(1f 54()).55();z.2a=4t;z.a();z.3Y=3R(q(){z.2p(4t,2q)},13)};z.1C=q(p){l(!z.R.1G)z.R.1G={};z.R.1G[I]=7.1m();l(I=="1j")z.2M(z.R.1G[I],1);F z.2M(0,z.R.1G[I]);l(I!="1j")y[I]="6Z"};z.1s=q(){l(!z.R.1G)z.R.1G={};z.R.1G[I]=7.1m();z.o.1s=V;z.2M(z.R.1G[I],0)};l(!z.R.71)z.R.59=6.1g(z.R,"39");y.39="1V";z.2p=q(47,46){u t=(1f 54()).55();l(t>z.o.2F+z.42){56(z.3Y);z.3Y=Q;z.2a=46;z.a();z.R.2P[I]=V;u 1J=V;H(u i 1q z.R.2P)l(z.R.2P[i]!==V)1J=14;l(1J){y.39=z.R.59;l(z.o.1s)y.1t=\'21\';l(z.o.1s){H(u p 1q z.R.2P){l(p=="1j"&&6.18.1y)6.1r(y,p,z.R.1G[p]);F y[p]=z.R.1G[p]+"5f";l(p==\'1z\'||p==\'27\')6.5i(z.R,p)}}}l(1J&&z.o.1I&&z.o.1I.N==1v)z.o.1I.17(z.R)}F{u p=(t-7.42)/z.o.2F;z.2a=((-5t.7m(p*5t.7q)/2)+0.5)*(46-47)+47;z.a()}}}});6.C.1L({7v:q(M,1K,G){7.2T(M,1K,G,1)},2T:q(M,1K,G,1E){l(M.N==1v)v 7.3B("2T",M);G=G||q(){};u B="4d";l(1K){l(1K.N==1v){G=1K;1K=Q}F{1K=6.2C(1K);B="4x"}}u 3q=7;6.3C(B,M,1K,q(3r,12){l(12=="2w"||!1E&&12=="5s"){3q.5y(3r.2Z).U(G,[3r.2Z,12]);6("2b",3q).U(q(){l(7.3m)6.4v(7.3m);F 37.4i(1O,7.2V||7.7A||7.2u||"")})}F G.17(3q,[3r.2Z,12])},1E);v 7},7F:q(){v 6.2C(7)}});l(6.18.1y&&1Y 3b=="P")3b=q(){v 1f 7K(5J.5K.1c("7R 5")>=0?"7U.5P":"7W.5P")};1f q(){u e="4G,5M,5F,5D,5x".3y(",");H(u i=0;i-1)?"&":"?")+6.2C(J);6.3C("4d",M,Q,q(r,12){l(G)G(6.3n(r,B),12)},1E)},5Z:q(M,J,G,B){6.1o(M,J,G,B,1)},4v:q(M,G){6.1o(M,G,"2b")},64:q(M,J,G){l(G)6.1o(M,J,G,"3S");F{6.1o(M,J,"3S")}},6b:q(M,J,G,B){6.3C("4x",M,6.2C(J),q(r,12){l(G)G(6.3n(r,B),12)})},1u:0,6i:q(1u){6.1u=1u},38:{},3C:q(B,M,J,K,1E){l(!M){K=B.1I;u 2w=B.2w;u 2k=B.2k;u 49=B.49;u 1i=1Y B.1i=="85"?B.1i:V;u 1u=1Y B.1u=="6s"?B.1u:6.1u;u 1E=B.1E||14;J=B.J;M=B.M;B=B.B}l(1i&&!6.3I++)6.L.1Q("4G");u 4p=14;u O=1f 3b();O.6y(B||"4d",M,V);l(J)O.30("6D-6E","6F/x-6J-6L-6O");l(1E)O.30("6S-40-6V",6.38[M]||"6W, 6Y 70 72 3V:3V:3V 73");O.30("X-74-75","3b");l(O.78)O.30("7c","7g");u 2A=q(43){l(O&&(O.2Y==4||43=="1u")){4p=V;u 12=6.4y(O)&&43!="1u"?1E&&6.4Q(O,M)?"5s":"2w":"2k";l(12!="2k"){u 3F;3x{3F=O.4b("4T-40")}3h(e){}l(1E&&3F)6.38[M]=3F;l(2w)2w(6.3n(O,49),12);l(1i)6.L.1Q("5x")}F{l(2k)2k(O,12);l(1i)6.L.1Q("5D")}l(1i)6.L.1Q("5F");l(1i&&!--6.3I)6.L.1Q("5M");l(K)K(O,12);O.2A=q(){};O=Q}};O.2A=2A;l(1u>0)7X(q(){l(O){O.82();l(!4p)2A("1u");O=Q}},1u);O.65(J)},3I:0,4y:q(r){3x{v!r.12&&6l.6m=="4l:"||(r.12>=4H&&r.12<6B)||r.12==4W||6.18.3e&&r.12==P}3h(e){}v 14},4Q:q(O,M){3x{u 50=O.4b("4T-40");v O.12==4W||50==6.38[M]||6.18.3e&&O.12==P}3h(e){}v 14},3n:q(r,B){u 4k=r.4b("7G-B");u J=!B&&4k&&4k.1c("O")>=0;J=B=="O"||J?r.8j:r.2Z;l(B=="2b")37.4i(1O,J);l(B=="3S")37("J = "+J);v J},2C:q(a){u s=[];l(a.N==2y||a.2J){H(u i=0;i'; - $(this).prepend(str); - }); - - // attach folds - $(".outline ul li").toggle( - - // hide - function(){ - if ( $(this).children("ul").size() == 0 ) return; - $(this).children("ul").slideUp("slow"); - $(this).find(".linenum").addClass("linenum-folded"); - }, - - // show - function(){ - $(this).children("ul").slideDown("slow"); - $(this).find(".linenum").removeClass("linenum-folded"); - } - ); - -}); diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/javascript/theme3.js b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/javascript/theme3.js deleted file mode 100644 index e3b78cf..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/javascript/theme3.js +++ /dev/null @@ -1,22 +0,0 @@ -$(document).ready(function(){ - - // append content div - $("body").prepend("
    test
    "); - $("#content").hide(); - - // FIXME - document.width + document.height - $(".outline").click(function(){ - $("#content").html( $(this).html() ); - $("body").background("#7b7c8c"); - $("#content").show(); - }); - - $("#content").click(function(){ - $(this).hide(); - $("body").background("#acadc3"); - }); - - // re-activate links (the event is stomped on by the li event) - $(".outline a").click(function(){ window.location.href = this; return false; }); - -}); diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/sample.otl b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/sample.otl deleted file mode 100644 index aa2dc4e..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/sample.otl +++ /dev/null @@ -1,39 +0,0 @@ -<:title=Sample OTL list :counts=1 :timer=1 :style=styles/theme1.css :legend=1 :last_mod=1 - -: Theme examples: -: basic advanced advanced2 - -[_] 29% Things to get for party - [_] 25% Food - [_] Chips - [_] Dips - [X] Honey roasted peanuts - [_] Sausage - [_] 33% Party favors - [_] Hats - [_] Whistles - [X] Beer bong - -[_] 19% House projects - [_] 25% Paint - [_] 50% Buy supplies - [_] Paint - [X] Brushes - [X] Trays 2006-09-14 - [_] Overalls - [_] 0% Rooms done - [_] Bathroom - [_] Bedroom - : Red? - [_] 13% Upgrade electrical - [_] 2 circuits to computer room - [_] 40% Get equipment - [X] Romex wire - [_] Entry feed wire - : How much of this do I really need? I should probably go out to the street and measure stuff. - : Make sure the inspector has access to examine stuff on side of house. - [_] Service meter - [X] Grounding rods - [_] Breakers - [_] Learn about electricity - [_] Don't die diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme1.css b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme1.css deleted file mode 100644 index 090d945..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme1.css +++ /dev/null @@ -1,88 +0,0 @@ - -body -{ - width: 600px; - font-size: 0.9em; - font-family: sans; -} - -ul -{ - list-style-type: none; - line-height: 1.5em; - padding-left: 20px; -} - -.date -{ - font-size: 0.6em; -} - -.outline -{ - margin-bottom: 30px; -} - -.percent -{ - color: blue; -} - -.comment, .counts -{ - font-size: 0.7em; - line-height: 1em; - padding-top: 2px; - margin-bottom: 5px; - font-family: sans; -} - -.comment_pre -{ - font-style: normal; - font-family: courier; - white-space: pre; -} - -.counts -{ - margin-left: 10px; -} - -.counts:before { content: "("; } -.counts:after { content: ")"; } - -.todo -{ - padding-left: 4px; -} - -.done -{ - background-color: #f4f4f4; - color: #777; - padding-left: 4px; -} - -.done:before -{ - font-size: 1.5em; - color: green; - content: "\2611 "; -} - -.todo:before -{ - font-size: 1.5em; - color: #777; - content: "\2610 "; -} - -.legend .todo, .legend .done { border: 0 } -.legend -{ - margin-bottom: 30px; - margin-top: 20px; -} - - diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme2.css b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme2.css deleted file mode 100644 index 869a876..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme2.css +++ /dev/null @@ -1,152 +0,0 @@ - -body -{ - background-color: #444; - font: 11px/1.8em sans-serif; - margin: 0; - padding-bottom: 50px; - color: #ccc; -} - -a, a:visited -{ - text-decoration: none; - color: #7f9ab5; -} - -.header -{ - background-color: #aaa; - padding: 3px 0 3px 120px; - margin-top: 50px; - color: #3a5f85; - border-top: 5px solid #333; - font-size: 20px; - font-weight: bold; -} - -.last_mod -{ - padding-left: 120px; - background-color: #333; - border-bottom: 1px solid #000; - font-size: 0.85em; - color: #999; -} - -.percent -{ - display: none; - color: #7f9ab5; - font-weight: bold; - position: absolute; - left: 115px; -} - -.linenum -{ - color: #7f9ab5; - position: absolute; - left: 0; - font-size: 9px; - font-weight: normal; - font-style: normal; - width: 60px; - text-align: right; -} - -.linenum-folded -{ - color: #666; -} - -.timer -{ - color: #666; - position: absolute; - top: 5px; - right: 10px; -} - -.outline -{ - width: 400px; - margin: 20px 0 0 150px; - display: none; - cursor: pointer; -} - -.outline ul -{ - margin: 0; - padding: 0 10px 0 5px; - list-style-type: none; -} - -.outline ul li -{ - padding: 0 0 0 10px; - display: block; - color: #fff; - font-size: 14px; - font-weight: bold; -} - -.outline ul li:hover -{ - color: #fff; -} - -.outline ul li ul li -{ - border-left: 1px solid #666; - color: #ccc; - font-size: 11px; - font-weight: normal; -} - -.outline ul li ul li:hover -{ - border-left: 1px solid #aaa; -} - -.done -{ - color: #777 !important; - font-style: italic; -} - -.done:after -{ - font-size: 0.9em; - content: " (done)"; -} - -.comment -{ - padding-right: 2px !important; - font-style: italic; - border-top: 1px solid #666; - border-bottom: 1px solid #666; - border-right: 1px solid #666; -} - -.comment_pre -{ - font-style: normal; - font-family: courier; - white-space: pre; -} - -.comment:hover -{ - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; - border-right: 1px solid #aaa; -} - -.selected -{ - background-color: #3d3d3d; -} - diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme3.css b/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme3.css deleted file mode 100644 index 4f8b25c..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otl_handler/styles/theme3.css +++ /dev/null @@ -1,109 +0,0 @@ - -body -{ - background-color: #acadc3; - font: 12px Verdana, sans-serif; - color: #000; - text-align: center; -} - -a, a:visited -{ - text-decoration: none; - color: blue; -} - -.header -{ - margin-top: 40px; - font-size: 2em; - font-weight: bold; -} - -.header:after { content: " ----|" } -.header:before { content: "|---- " } - -.last_mod { font-size: .85em; } -.percent { font-weight: bold; } - -.sort -{ - margin-bottom: 30px; - font-size: .85em; -} - -.outline -{ - cursor: pointer; - float: left; - padding: 20px; - border: 1px solid #8082a9; - margin-left: 10px; - background-color: #ccc; -} - -.outline:hover -{ - border: 1px solid #000; -} - -.outline ul, #content ul -{ - padding: 0; - margin: 0; - list-style-type: none; -} - -.outline ul li ul li { display: none; } - -#content ul li ul { padding-left: 20px; } - -#content ul li -{ - font-weight: bold; - font-size: 1.5em; - text-align: center; - color: #3a3d85; -} - -#content ul li ul li -{ - font-weight: normal; - text-align: left; - font-size: 10px; - color: #000; -} - -#content .done { color: #777; } -.comment { font-style: italic; } - -#content ul li .percent { color: #ff7e00; } -#content ul li ul li .percent { color: #000; } - -#content .comment -{ - font-style: italic; - border-left: 1px solid #999; - padding-left: 5px; - margin-bottom: 3px; -} - -#content .comment_pre -{ - font-style: normal; - font-family: courier; - white-space: pre; -} - -#content -{ - position: absolute; - left: 15%; - width: 60%; - height: 80%; - cursor: pointer; - background-color: #fff; - border: 2px solid #3a3d85; - padding: 10px; -} - diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otlgrep.py b/pack/acp/start/vimoutliner/vimoutliner/scripts/otlgrep.py deleted file mode 100755 index 7b2dea3..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otlgrep.py +++ /dev/null @@ -1,212 +0,0 @@ -#!/usr/bin/python2 -# otlgrep.py -# grep an outline for a regex and return the branch with all the leaves. -# -# Copyright 2005 Noel Henson All rights reserved - -########################################################################### -# Basic function -# -# This program searches an outline file for a branch that contains -# a line matching the regex argument. The parent headings (branches) -# and the children (sub-branches and leaves) of the matching headings -# are returned. -# -# Examples -# -# Using this outline: -# -# Pets -# Indoor -# Cats -# Sophia -# Hillary -# Rats -# Finley -# Oliver -# Dogs -# Kirby -# Outdoor -# Dogs -# Kirby -# Hoover -# Goats -# Primrose -# Joey -# -# a grep for Sophia returns: -# -# Indoor -# Cats -# Sophia -# -# a grep for Dogs returns: -# -# Indoor -# Dogs -# Kirby -# Hoover -# Outdoor -# Dogs -# Kirby -# Hoover -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -########################################################################### -# include whatever mdules we need - -import sys -import re - -########################################################################### -# global variables - -debug = 0 -ignorecase = 0 -pattern = "" -inputfiles = [] - -########################################################################### -# function definitions# usage -# -# print debug statements -# input: string -# output: string printed to standard out - - -def dprint(*vals): - global debug - if debug != 0: - print vals - - -# usage -# print the simplest form of help -# input: none -# output: simple command usage is printed on the console -def showUsage(): - print """ - Usage: - otlgrep.py [options] pattern [file...] - Options - -i Ignore case - --help Show help. - [file...] is zero or more files to search. Wildcards are supported. - if no file is specified, input is expected on stdin. - output is on STDOUT - """ - - -# getArgs -# Check for input arguments and set the necessary switches -# input: none -# output: possible console output for help, switch variables may be set - -def getArgs(): - global debug, pattern, inputfiles, ignorecase - if (len(sys.argv) == 1): - showUsage() - sys.exit()() - else: - for i in range(len(sys.argv)): - if (i != 0): - if (sys.argv[i] == "-d"): - debug = 1 # test for debug flag - elif (sys.argv[i] == "-i"): - ignorecase = 1 # test for debug flag - elif (sys.argv[i] == "-?"): # test for help flag - showUsage() # show the help - sys.exit() # exit - elif (sys.argv[i] == "--help"): - showUsage() - sys.exit() - elif (sys.argv[i][0] == "-"): - print "Error! Unknown option. Aborting" - sys.exit() - else: # get the input file name - if (pattern == ""): - pattern = sys.argv[i] - else: - inputfiles.append(sys.argv[i]) - - -# getLineLevel -# get the level of the current line (count the number of tabs) -# input: linein - a single line that may or may not have tabs at the beginning -# output: returns a number 1 is the lowest -def getLineLevel(linein): - strstart = linein.lstrip() # find the start of text in line - x = linein.find(strstart) # find the text index in the line - n = linein.count("\t", 0, x) # count the tabs - return(n) # return the count + 1 (for level) - - -# processFile -# split an outline file -# input: file - the filehandle of the file we are splitting -# output: output files -def processFile(file): - global debug, pattern, ignorecase - - parents = [] - parentprinted = [] - for i in range(10): - parents.append("") - parentprinted.append(0) - - matchlevel = 0 - line = file.readline() # read the outline title - # and discard it - line = file.readline() # read the first parent heading - while (line != ""): - level = getLineLevel(line) - parents[level] = line - parentprinted[level] = 0 - if (ignorecase == 1): - linesearch = re.search(pattern, line.strip(), re.I) - else: - linesearch = re.search(pattern, line.strip()) - if (linesearch is not None): - matchlevel = level - for i in range(level): # print my ancestors - if (parentprinted[i] == 0): - print parents[i][:-1] - parentprinted[i] = 1 - print parents[level][:-1] # print myself - line = file.readline() - while (line != "") and (getLineLevel(line) > matchlevel): - print line[:-1] - line = file.readline() - else: - line = file.readline() - - -# main -# split an outline -# input: args and input file -# output: output files - -def main(): - global inputfiles, debug - getArgs() - if (len(inputfiles) == 0): - processFile(sys.stdin) - else: - for i in range(len(inputfiles)): - file = open(inputfiles[i], "r") - processFile(file) - file.close() - -main() diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otlhead.sh b/pack/acp/start/vimoutliner/vimoutliner/scripts/otlhead.sh deleted file mode 100755 index ea05fda..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otlhead.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -if [ "$#" -lt 1 ] ; then - echo " Usage: otlhead level < file" - echo " Keep the number of levels specified, remove the rest." - echo " Great for generating summaries." - echo " level - the number of levels to include" - echo " file - an otl file" - echo " input - standard in" - echo " output - standard out" - exit 0 -fi -sed "/^\(\t\)\{$1\}.*$/ { D }" diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otlsplit.py b/pack/acp/start/vimoutliner/vimoutliner/scripts/otlsplit.py deleted file mode 100755 index 2715e89..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otlsplit.py +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/python2 -# otlslit.py -# split an outline into several files. -# -# Copyright 2005 Noel Henson All rights reserved - -########################################################################### -# Basic function -# -# This program accepts text outline files and splits them into -# several smaller files. The output file names are produced from the -# heading names of the parents. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . - -########################################################################### -# include whatever mdules we need - -import sys -import re -########################################################################### -# global variables - -debug = 0 -subdir = "" -level = 1 -title = 0 -inputfile = "" - - -########################################################################### -# function definitions# usage -# -# print debug statements -# input: string -# output: string printed to standard out -def dprint(*vals): - global debug - if debug != 0: - print vals - - -# usage -# print the simplest form of help -# input: none -# output: simple command usage is printed on the console -def showUsage(): - print """ - Usage: - otlsplit.py [options] inputfile - Options - -l level The number of levels to split down to. The default is 1 - -D dir Specifiy a target directory for the output files - -t Include a title line (the parerent heading) in split files - -h Show help. - output is on STDOUT - """ - - -# getArgs -# Check for input arguments and set the necessary switches -# input: none -# output: possible console output for help, switch variables may be set -def getArgs(): - global debug, level, inputfile, title, subdir - if (len(sys.argv) == 1): - showUsage() - sys.exit()() - else: - for i in range(len(sys.argv)): - if (i != 0): - if (sys.argv[i] == "-d"): - debug = 1 # test for debug flag - elif (sys.argv[i] == "-?"): # test for help flag - showUsage() # show the help - sys.exit() # exit - elif (sys.argv[i] == "-l"): # test for the level flag - level = int(sys.argv[i + 1]) # get the level - i = i + 1 # increment the pointer - elif (sys.argv[i] == "-D"): # test for the subdir flag - subdir = sys.argv[i + 1] # get the subdir - i = i + 1 # increment the pointer - elif (sys.argv[i] == "-t"): - title = 1 # test for title flag - elif (sys.argv[i] == "--help"): - showUsage() - sys.exit() - elif (sys.argv[i] == "-h"): - showUsage() - sys.exit() - elif (sys.argv[i][0] == "-"): - print "Error! Unknown option. Aborting" - sys.exit() - else: # get the input file name - inputfile = sys.argv[i] - - -# getLineLevel -# get the level of the current line (count the number of tabs) -# input: linein - a single line that may or may not have tabs at the beginning -# output: returns a number 1 is the lowest -def getLineLevel(linein): - strstart = linein.lstrip() # find the start of text in line - x = linein.find(strstart) # find the text index in the line - n = linein.count("\t", 0, x) # count the tabs - return(n + 1) # return the count + 1 (for level) - - -# convertSensitiveChars -# get the level of the current line (count the number of tabs) -# input: line - a single line that may or may not have tabs at the beginning -# output: returns a string -def convertSensitiveChars(line): - line = re.sub('\W', '_', line.strip()) - return(line) - - -# makeFileName -# make a file name from the string array provided -# input: line - a single line that may or may not have tabs at the beginning -# output: returns a string -def makeFileName(nameParts): - global debug, level, subdir - - filename = "" - for i in range(level): - filename = filename + convertSensitiveChars(nameParts[i]).strip() + "-" - filename = filename[:-1] + ".otl" - if subdir != "": - filename = subdir + "/" + filename - return(filename.lower()) - - -# processFile -# split an outline file -# input: file - the filehandle of the file we are splitting -# output: output files -def processFile(ifile): - global debug, level, title - - nameparts = [] - for i in range(10): - nameparts.append("") - - outOpen = 0 - - line = ifile.readline() # read the outline title - # and discard it - line = ifile.readline() # read the first parent heading - dprint(level) - while (line != ""): - linelevel = getLineLevel(line) - if (linelevel < level): - if outOpen == 1: - ifile.close() - outOpen = 0 - nameparts[linelevel] = line - dprint(level, linelevel, line) - else: - if outOpen == 0: - ofile = open(makeFileName(nameparts), "w") - outOpen = 1 - if title == 1: - dprint("title:", title) - ofile.write(nameparts[level - 1]) - ofile.write(line[level:]) - line = file.readline() - - -# main -# split an outline -# input: args and input file -# output: output files -def main(): - global inputfile, debug - getArgs() - file = open(inputfile, "r") - processFile(file) - file.close() - -main() diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/otltail.sh b/pack/acp/start/vimoutliner/vimoutliner/scripts/otltail.sh deleted file mode 100755 index 82df8a0..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/otltail.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -if [ "$#" -lt 1 ] ; then - echo " Usage: otltail level < file" - echo " Remove the specified number of parent headings." - echo " This is a way to promote children. It is" - echo " useful for converting a single outline into a" - echo " number of pages for a web site or chapters for" - echo " a book." - echo " level - the number of levels to include" - echo " file - an otl file" - echo " input - standard in" - echo " output - standard out" - exit 0 -fi -sed "/^\(\t\)\{$1\}.*$/! { D }" | sed "s/^\(\t\)\{$1\}//" diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/2005.otl b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/2005.otl deleted file mode 100644 index 5d93abe..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/2005.otl +++ /dev/null @@ -1,1472 +0,0 @@ -January 2005 - 2005_01_01 Sat - To do - Diary - Timesheet - 2005_01_02 Sun - To do - Diary - Timesheet - 2005_01_03 Mon - To do - Diary - Timesheet - 2005_01_04 Tue - To do - Diary - Timesheet - 2005_01_05 Wed - To do - Diary - Timesheet - 2005_01_06 Thu - To do - Diary - Timesheet - 2005_01_07 Fri - To do - Diary - Timesheet - 2005_01_08 Sat - To do - Diary - Timesheet - 2005_01_09 Sun - To do - Diary - Timesheet - 2005_01_10 Mon - To do - Diary - Timesheet - 2005_01_11 Tue - To do - Diary - Timesheet - 2005_01_12 Wed - To do - Diary - Timesheet - 2005_01_13 Thu - To do - Diary - Timesheet - 2005_01_14 Fri - To do - Diary - Timesheet - 2005_01_15 Sat - To do - Diary - Timesheet - 2005_01_16 Sun - To do - Diary - Timesheet - 2005_01_17 Mon - To do - Diary - Timesheet - 2005_01_18 Tue - To do - Diary - Timesheet - 2005_01_19 Wed - To do - Diary - Timesheet - 2005_01_20 Thu - To do - Diary - Timesheet - 2005_01_21 Fri - To do - Diary - Timesheet - 2005_01_22 Sat - To do - Diary - Timesheet - 2005_01_23 Sun - To do - Diary - Timesheet - 2005_01_24 Mon - To do - Diary - Timesheet - 2005_01_25 Tue - To do - Diary - Timesheet - 2005_01_26 Wed - To do - Diary - Timesheet - 2005_01_27 Thu - To do - Diary - Timesheet - 2005_01_28 Fri - To do - Diary - Timesheet - 2005_01_29 Sat - To do - Diary - Timesheet - 2005_01_30 Sun - To do - Diary - Timesheet - 2005_01_31 Mon - To do - Diary - Timesheet -February 2005 - 2005_02_01 Tue - To do - Diary - Timesheet - 2005_02_02 Wed - To do - Diary - Timesheet - 2005_02_03 Thu - To do - Diary - Timesheet - 2005_02_04 Fri - To do - Diary - Timesheet - 2005_02_05 Sat - To do - Diary - Timesheet - 2005_02_06 Sun - To do - Diary - Timesheet - 2005_02_07 Mon - To do - Diary - Timesheet - 2005_02_08 Tue - To do - Diary - Timesheet - 2005_02_09 Wed - To do - Diary - Timesheet - 2005_02_10 Thu - To do - Diary - Timesheet - 2005_02_11 Fri - To do - Diary - Timesheet - 2005_02_12 Sat - To do - Diary - Timesheet - 2005_02_13 Sun - To do - Diary - Timesheet - 2005_02_14 Mon - To do - Diary - Timesheet - 2005_02_15 Tue - To do - Diary - Timesheet - 2005_02_16 Wed - To do - Diary - Timesheet - 2005_02_17 Thu - To do - Diary - Timesheet - 2005_02_18 Fri - To do - Diary - Timesheet - 2005_02_19 Sat - To do - Diary - Timesheet - 2005_02_20 Sun - To do - Diary - Timesheet - 2005_02_21 Mon - To do - Diary - Timesheet - 2005_02_22 Tue - To do - Diary - Timesheet - 2005_02_23 Wed - To do - Diary - Timesheet - 2005_02_24 Thu - To do - Diary - Timesheet - 2005_02_25 Fri - To do - Diary - Timesheet - 2005_02_26 Sat - To do - Diary - Timesheet - 2005_02_27 Sun - To do - Diary - Timesheet - 2005_02_28 Mon - To do - Diary - Timesheet -March 2005 - 2005_03_01 Tue - To do - Diary - Timesheet - 2005_03_02 Wed - To do - Diary - Timesheet - 2005_03_03 Thu - To do - Diary - Timesheet - 2005_03_04 Fri - To do - Diary - Timesheet - 2005_03_05 Sat - To do - Diary - Timesheet - 2005_03_06 Sun - To do - Diary - Timesheet - 2005_03_07 Mon - To do - Diary - Timesheet - 2005_03_08 Tue - To do - Diary - Timesheet - 2005_03_09 Wed - To do - Diary - Timesheet - 2005_03_10 Thu - To do - Diary - Timesheet - 2005_03_11 Fri - To do - Diary - Timesheet - 2005_03_12 Sat - To do - Diary - Timesheet - 2005_03_13 Sun - To do - Diary - Timesheet - 2005_03_14 Mon - To do - Diary - Timesheet - 2005_03_15 Tue - To do - Diary - Timesheet - 2005_03_16 Wed - To do - Diary - Timesheet - 2005_03_17 Thu - To do - Diary - Timesheet - 2005_03_18 Fri - To do - Diary - Timesheet - 2005_03_19 Sat - To do - Diary - Timesheet - 2005_03_20 Sun - To do - Diary - Timesheet - 2005_03_21 Mon - To do - Diary - Timesheet - 2005_03_22 Tue - To do - Diary - Timesheet - 2005_03_23 Wed - To do - Diary - Timesheet - 2005_03_24 Thu - To do - Diary - Timesheet - 2005_03_25 Fri - To do - Diary - Timesheet - 2005_03_26 Sat - To do - Diary - Timesheet - 2005_03_27 Sun - To do - Diary - Timesheet - 2005_03_28 Mon - To do - Diary - Timesheet - 2005_03_29 Tue - To do - Diary - Timesheet - 2005_03_30 Wed - To do - Diary - Timesheet - 2005_03_31 Thu - To do - Diary - Timesheet -April 2005 - 2005_04_01 Fri - To do - Diary - Timesheet - 2005_04_02 Sat - To do - Diary - Timesheet - 2005_04_03 Sun - To do - Diary - Timesheet - 2005_04_04 Mon - To do - Diary - Timesheet - 2005_04_05 Tue - To do - Diary - Timesheet - 2005_04_06 Wed - To do - Diary - Timesheet - 2005_04_07 Thu - To do - Diary - Timesheet - 2005_04_08 Fri - To do - Diary - Timesheet - 2005_04_09 Sat - To do - Diary - Timesheet - 2005_04_10 Sun - To do - Diary - Timesheet - 2005_04_11 Mon - To do - Diary - Timesheet - 2005_04_12 Tue - To do - Diary - Timesheet - 2005_04_13 Wed - To do - Diary - Timesheet - 2005_04_14 Thu - To do - Diary - Timesheet - 2005_04_15 Fri - To do - Diary - Timesheet - 2005_04_16 Sat - To do - Diary - Timesheet - 2005_04_17 Sun - To do - Diary - Timesheet - 2005_04_18 Mon - To do - Diary - Timesheet - 2005_04_19 Tue - To do - Diary - Timesheet - 2005_04_20 Wed - To do - Diary - Timesheet - 2005_04_21 Thu - To do - Diary - Timesheet - 2005_04_22 Fri - To do - Diary - Timesheet - 2005_04_23 Sat - To do - Diary - Timesheet - 2005_04_24 Sun - To do - Diary - Timesheet - 2005_04_25 Mon - To do - Diary - Timesheet - 2005_04_26 Tue - To do - Diary - Timesheet - 2005_04_27 Wed - To do - Diary - Timesheet - 2005_04_28 Thu - To do - Diary - Timesheet - 2005_04_29 Fri - To do - Diary - Timesheet - 2005_04_30 Sat - To do - Diary - Timesheet -May 2005 - 2005_05_01 Sun - To do - Diary - Timesheet - 2005_05_02 Mon - To do - Diary - Timesheet - 2005_05_03 Tue - To do - Diary - Timesheet - 2005_05_04 Wed - To do - Diary - Timesheet - 2005_05_05 Thu - To do - Diary - Timesheet - 2005_05_06 Fri - To do - Diary - Timesheet - 2005_05_07 Sat - To do - Diary - Timesheet - 2005_05_08 Sun - To do - Diary - Timesheet - 2005_05_09 Mon - To do - Diary - Timesheet - 2005_05_10 Tue - To do - Diary - Timesheet - 2005_05_11 Wed - To do - Diary - Timesheet - 2005_05_12 Thu - To do - Diary - Timesheet - 2005_05_13 Fri - To do - Diary - Timesheet - 2005_05_14 Sat - To do - Diary - Timesheet - 2005_05_15 Sun - To do - Diary - Timesheet - 2005_05_16 Mon - To do - Diary - Timesheet - 2005_05_17 Tue - To do - Diary - Timesheet - 2005_05_18 Wed - To do - Diary - Timesheet - 2005_05_19 Thu - To do - Diary - Timesheet - 2005_05_20 Fri - To do - Diary - Timesheet - 2005_05_21 Sat - To do - Diary - Timesheet - 2005_05_22 Sun - To do - Diary - Timesheet - 2005_05_23 Mon - To do - Diary - Timesheet - 2005_05_24 Tue - To do - Diary - Timesheet - 2005_05_25 Wed - To do - Diary - Timesheet - 2005_05_26 Thu - To do - Diary - Timesheet - 2005_05_27 Fri - To do - Diary - Timesheet - 2005_05_28 Sat - To do - Diary - Timesheet - 2005_05_29 Sun - To do - Diary - Timesheet - 2005_05_30 Mon - To do - Diary - Timesheet - 2005_05_31 Tue - To do - Diary - Timesheet -June 2005 - 2005_06_01 Wed - To do - Diary - Timesheet - 2005_06_02 Thu - To do - Diary - Timesheet - 2005_06_03 Fri - To do - Diary - Timesheet - 2005_06_04 Sat - To do - Diary - Timesheet - 2005_06_05 Sun - To do - Diary - Timesheet - 2005_06_06 Mon - To do - Diary - Timesheet - 2005_06_07 Tue - To do - Diary - Timesheet - 2005_06_08 Wed - To do - Diary - Timesheet - 2005_06_09 Thu - To do - Diary - Timesheet - 2005_06_10 Fri - To do - Diary - Timesheet - 2005_06_11 Sat - To do - Diary - Timesheet - 2005_06_12 Sun - To do - Diary - Timesheet - 2005_06_13 Mon - To do - Diary - Timesheet - 2005_06_14 Tue - To do - Diary - Timesheet - 2005_06_15 Wed - To do - Diary - Timesheet - 2005_06_16 Thu - To do - Diary - Timesheet - 2005_06_17 Fri - To do - Diary - Timesheet - 2005_06_18 Sat - To do - Diary - Timesheet - 2005_06_19 Sun - To do - Diary - Timesheet - 2005_06_20 Mon - To do - Diary - Timesheet - 2005_06_21 Tue - To do - Diary - Timesheet - 2005_06_22 Wed - To do - Diary - Timesheet - 2005_06_23 Thu - To do - Diary - Timesheet - 2005_06_24 Fri - To do - Diary - Timesheet - 2005_06_25 Sat - To do - Diary - Timesheet - 2005_06_26 Sun - To do - Diary - Timesheet - 2005_06_27 Mon - To do - Diary - Timesheet - 2005_06_28 Tue - To do - Diary - Timesheet - 2005_06_29 Wed - To do - Diary - Timesheet - 2005_06_30 Thu - To do - Diary - Timesheet -July 2005 - 2005_07_01 Fri - To do - Diary - Timesheet - 2005_07_02 Sat - To do - Diary - Timesheet - 2005_07_03 Sun - To do - Diary - Timesheet - 2005_07_04 Mon - To do - Diary - Timesheet - 2005_07_05 Tue - To do - Diary - Timesheet - 2005_07_06 Wed - To do - Diary - Timesheet - 2005_07_07 Thu - To do - Diary - Timesheet - 2005_07_08 Fri - To do - Diary - Timesheet - 2005_07_09 Sat - To do - Diary - Timesheet - 2005_07_10 Sun - To do - Diary - Timesheet - 2005_07_11 Mon - To do - Diary - Timesheet - 2005_07_12 Tue - To do - Diary - Timesheet - 2005_07_13 Wed - To do - Diary - Timesheet - 2005_07_14 Thu - To do - Diary - Timesheet - 2005_07_15 Fri - To do - Diary - Timesheet - 2005_07_16 Sat - To do - Diary - Timesheet - 2005_07_17 Sun - To do - Diary - Timesheet - 2005_07_18 Mon - To do - Diary - Timesheet - 2005_07_19 Tue - To do - Diary - Timesheet - 2005_07_20 Wed - To do - Diary - Timesheet - 2005_07_21 Thu - To do - Diary - Timesheet - 2005_07_22 Fri - To do - Diary - Timesheet - 2005_07_23 Sat - To do - Diary - Timesheet - 2005_07_24 Sun - To do - Diary - Timesheet - 2005_07_25 Mon - To do - Diary - Timesheet - 2005_07_26 Tue - To do - Diary - Timesheet - 2005_07_27 Wed - To do - Diary - Timesheet - 2005_07_28 Thu - To do - Diary - Timesheet - 2005_07_29 Fri - To do - Diary - Timesheet - 2005_07_30 Sat - To do - Diary - Timesheet - 2005_07_31 Sun - To do - Diary - Timesheet -August 2005 - 2005_08_01 Mon - To do - Diary - Timesheet - 2005_08_02 Tue - To do - Diary - Timesheet - 2005_08_03 Wed - To do - Diary - Timesheet - 2005_08_04 Thu - To do - Diary - Timesheet - 2005_08_05 Fri - To do - Diary - Timesheet - 2005_08_06 Sat - To do - Diary - Timesheet - 2005_08_07 Sun - To do - Diary - Timesheet - 2005_08_08 Mon - To do - Diary - Timesheet - 2005_08_09 Tue - To do - Diary - Timesheet - 2005_08_10 Wed - To do - Diary - Timesheet - 2005_08_11 Thu - To do - Diary - Timesheet - 2005_08_12 Fri - To do - Diary - Timesheet - 2005_08_13 Sat - To do - Diary - Timesheet - 2005_08_14 Sun - To do - Diary - Timesheet - 2005_08_15 Mon - To do - Diary - Timesheet - 2005_08_16 Tue - To do - Diary - Timesheet - 2005_08_17 Wed - To do - Diary - Timesheet - 2005_08_18 Thu - To do - Diary - Timesheet - 2005_08_19 Fri - To do - Diary - Timesheet - 2005_08_20 Sat - To do - Diary - Timesheet - 2005_08_21 Sun - To do - Diary - Timesheet - 2005_08_22 Mon - To do - Diary - Timesheet - 2005_08_23 Tue - To do - Diary - Timesheet - 2005_08_24 Wed - To do - Diary - Timesheet - 2005_08_25 Thu - To do - Diary - Timesheet - 2005_08_26 Fri - To do - Diary - Timesheet - 2005_08_27 Sat - To do - Diary - Timesheet - 2005_08_28 Sun - To do - Diary - Timesheet - 2005_08_29 Mon - To do - Diary - Timesheet - 2005_08_30 Tue - To do - Diary - Timesheet - 2005_08_31 Wed - To do - Diary - Timesheet -September 2005 - 2005_09_01 Thu - To do - Diary - Timesheet - 2005_09_02 Fri - To do - Diary - Timesheet - 2005_09_03 Sat - To do - Diary - Timesheet - 2005_09_04 Sun - To do - Diary - Timesheet - 2005_09_05 Mon - To do - Diary - Timesheet - 2005_09_06 Tue - To do - Diary - Timesheet - 2005_09_07 Wed - To do - Diary - Timesheet - 2005_09_08 Thu - To do - Diary - Timesheet - 2005_09_09 Fri - To do - Diary - Timesheet - 2005_09_10 Sat - To do - Diary - Timesheet - 2005_09_11 Sun - To do - Diary - Timesheet - 2005_09_12 Mon - To do - Diary - Timesheet - 2005_09_13 Tue - To do - Diary - Timesheet - 2005_09_14 Wed - To do - Diary - Timesheet - 2005_09_15 Thu - To do - Diary - Timesheet - 2005_09_16 Fri - To do - Diary - Timesheet - 2005_09_17 Sat - To do - Diary - Timesheet - 2005_09_18 Sun - To do - Diary - Timesheet - 2005_09_19 Mon - To do - Diary - Timesheet - 2005_09_20 Tue - To do - Diary - Timesheet - 2005_09_21 Wed - To do - Diary - Timesheet - 2005_09_22 Thu - To do - Diary - Timesheet - 2005_09_23 Fri - To do - Diary - Timesheet - 2005_09_24 Sat - To do - Diary - Timesheet - 2005_09_25 Sun - To do - Diary - Timesheet - 2005_09_26 Mon - To do - Diary - Timesheet - 2005_09_27 Tue - To do - Diary - Timesheet - 2005_09_28 Wed - To do - Diary - Timesheet - 2005_09_29 Thu - To do - Diary - Timesheet - 2005_09_30 Fri - To do - Diary - Timesheet -October 2005 - 2005_10_01 Sat - To do - Diary - Timesheet - 2005_10_02 Sun - To do - Diary - Timesheet - 2005_10_03 Mon - To do - Diary - Timesheet - 2005_10_04 Tue - To do - Diary - Timesheet - 2005_10_05 Wed - To do - Diary - Timesheet - 2005_10_06 Thu - To do - Diary - Timesheet - 2005_10_07 Fri - To do - Diary - Timesheet - 2005_10_08 Sat - To do - Diary - Timesheet - 2005_10_09 Sun - To do - Diary - Timesheet - 2005_10_10 Mon - To do - Diary - Timesheet - 2005_10_11 Tue - To do - Diary - Timesheet - 2005_10_12 Wed - To do - Diary - Timesheet - 2005_10_13 Thu - To do - Diary - Timesheet - 2005_10_14 Fri - To do - Diary - Timesheet - 2005_10_15 Sat - To do - Diary - Timesheet - 2005_10_16 Sun - To do - Diary - Timesheet - 2005_10_17 Mon - To do - Diary - Timesheet - 2005_10_18 Tue - To do - Diary - Timesheet - 2005_10_19 Wed - To do - Diary - Timesheet - 2005_10_20 Thu - To do - Diary - Timesheet - 2005_10_21 Fri - To do - Diary - Timesheet - 2005_10_22 Sat - To do - Diary - Timesheet - 2005_10_23 Sun - To do - Diary - Timesheet - 2005_10_24 Mon - To do - Diary - Timesheet - 2005_10_25 Tue - To do - Diary - Timesheet - 2005_10_26 Wed - To do - Diary - Timesheet - 2005_10_27 Thu - To do - Diary - Timesheet - 2005_10_28 Fri - To do - Diary - Timesheet - 2005_10_29 Sat - To do - Diary - Timesheet - 2005_10_30 Sun - To do - Diary - Timesheet - 2005_10_31 Mon - To do - Diary - Timesheet -November 2005 - 2005_11_01 Tue - To do - Diary - Timesheet - 2005_11_02 Wed - To do - Diary - Timesheet - 2005_11_03 Thu - To do - Diary - Timesheet - 2005_11_04 Fri - To do - Diary - Timesheet - 2005_11_05 Sat - To do - Diary - Timesheet - 2005_11_06 Sun - To do - Diary - Timesheet - 2005_11_07 Mon - To do - Diary - Timesheet - 2005_11_08 Tue - To do - Diary - Timesheet - 2005_11_09 Wed - To do - Diary - Timesheet - 2005_11_10 Thu - To do - Diary - Timesheet - 2005_11_11 Fri - To do - Diary - Timesheet - 2005_11_12 Sat - To do - Diary - Timesheet - 2005_11_13 Sun - To do - Diary - Timesheet - 2005_11_14 Mon - To do - Diary - Timesheet - 2005_11_15 Tue - To do - Diary - Timesheet - 2005_11_16 Wed - To do - Diary - Timesheet - 2005_11_17 Thu - To do - Diary - Timesheet - 2005_11_18 Fri - To do - Diary - Timesheet - 2005_11_19 Sat - To do - Diary - Timesheet - 2005_11_20 Sun - To do - Diary - Timesheet - 2005_11_21 Mon - To do - Diary - Timesheet - 2005_11_22 Tue - To do - Diary - Timesheet - 2005_11_23 Wed - To do - Diary - Timesheet - 2005_11_24 Thu - To do - Diary - Timesheet - 2005_11_25 Fri - To do - Diary - Timesheet - 2005_11_26 Sat - To do - Diary - Timesheet - 2005_11_27 Sun - To do - Diary - Timesheet - 2005_11_28 Mon - To do - Diary - Timesheet - 2005_11_29 Tue - To do - Diary - Timesheet - 2005_11_30 Wed - To do - Diary - Timesheet -December 2005 - 2005_12_01 Thu - To do - Diary - Timesheet - 2005_12_02 Fri - To do - Diary - Timesheet - 2005_12_03 Sat - To do - Diary - Timesheet - 2005_12_04 Sun - To do - Diary - Timesheet - 2005_12_05 Mon - To do - Diary - Timesheet - 2005_12_06 Tue - To do - Diary - Timesheet - 2005_12_07 Wed - To do - Diary - Timesheet - 2005_12_08 Thu - To do - Diary - Timesheet - 2005_12_09 Fri - To do - Diary - Timesheet - 2005_12_10 Sat - To do - Diary - Timesheet - 2005_12_11 Sun - To do - Diary - Timesheet - 2005_12_12 Mon - To do - Diary - Timesheet - 2005_12_13 Tue - To do - Diary - Timesheet - 2005_12_14 Wed - To do - Diary - Timesheet - 2005_12_15 Thu - To do - Diary - Timesheet - 2005_12_16 Fri - To do - Diary - Timesheet - 2005_12_17 Sat - To do - Diary - Timesheet - 2005_12_18 Sun - To do - Diary - Timesheet - 2005_12_19 Mon - To do - Diary - Timesheet - 2005_12_20 Tue - To do - Diary - Timesheet - 2005_12_21 Wed - To do - Diary - Timesheet - 2005_12_22 Thu - To do - Diary - Timesheet - 2005_12_23 Fri - To do - Diary - Timesheet - 2005_12_24 Sat - To do - Diary - Timesheet - 2005_12_25 Sun - To do - Diary - Timesheet - 2005_12_26 Mon - To do - Diary - Timesheet - 2005_12_27 Tue - To do - Diary - Timesheet - 2005_12_28 Wed - To do - Diary - Timesheet - 2005_12_29 Thu - To do - Diary - Timesheet - 2005_12_30 Fri - To do - Diary - Timesheet - 2005_12_31 Sat - To do - Diary - Timesheet diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vimrc b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vimrc deleted file mode 100644 index 7537878..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vimrc +++ /dev/null @@ -1,31 +0,0 @@ -" add the calendar tag file to the tag search stack -set tags^=~/Outlines/outline_calendar/vo_calendar_tags.tag - -" open the calendar at date -" a:1 is executed before the jump -function ToDate(date, ...) - let l:precmd = a:0>0 ? a:1 : "" - exec l:precmd - exec "tag " . a:date . "|normal zO" -endfunction - -" open the calendar at a requested date -" default is today -" a:1 is executed before the jump -function ToSomeDay(...) - let l:precmd = a:0>0 ? a:1 : "" - let l:today = strftime("%Y-%m-%d") - let l:date = input('Date To Goto (yyyy-mm-dd): ', today) - call ToDate(l:date, l:precmd) -endfunction - -" small case jumps use same window -nmap td :call ToDate(strftime("%Y-%m-%d")) -nmap ts :call ToSomeDay() -nmap tc :call ToDate(expand("")) - -" upper case jumps open new window -nmap tD :call ToDate(strftime("%Y-%m-%d"),"new") -nmap tS :call ToSomeDay("new") -nmap tC :call ToDate(expand(""),"new") - diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_ctags.conf b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_ctags.conf deleted file mode 100644 index 579da09..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_ctags.conf +++ /dev/null @@ -1,9 +0,0 @@ ---langdef=outline ---langmap=outline:.otl ---regex-outline=/_tag_ set ([^ ]+)/_tag_\1/ ---regex-outline=/^\t+([1-9][0-9]{3})_([01][0-9])_([0-3][0-9])/\1-\2-\3/ - ---languages=-all,+outline ---recurse - ---totals=yes diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_generator.rb b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_generator.rb deleted file mode 100755 index adbbc6f..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_generator.rb +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/ruby - -# usage: -# calendar_generator.rb - -# indent for months, days are indented one more level -# both 0 and 1 make sense -MONTHINDENT = 0 - - -# insert _tag_ todo and _tag_ done items under each day -# DIARY = ["Zu erledigen", "Tagebuch", "Abrechnen"] -# DIARY = [] # for empty days. -DIARY = ["To do", "Diary", "Timesheet"] # deluxe edition - - -# adapt to your preference -# Sunday should be first, Saturday last entry -# DAYNAMES = %w(So Mo Di Mi Do Fr Sa) -DAYNAMES = %w(Sun Mon Tue Wed Thu Fri Sat) - - -# January should be first, December last entry -# MONTHNAMES = %w(Januar Februar März April Mai Juni Juli August September Oktober November Dezember) -MONTHNAMES = %w(January February March April May June July August September October November December) - -# you should not need to change anything below here -# but you are welcome to write equivalent functionality -# in your language of choice. -# ------------------------------------------------------------ -require "date" - -TAGFORMAT = "%.4d_%.2d_%.2d" - - -def indent(sublevel) - "\t"*(MONTHINDENT+sublevel) -end - -def month(date) - MONTHNAMES[date.month - 1] + - (MONTHINDENT == 0 ? " " + date.year.to_s : "") -end - -class Shelf - def initialize(path) - begin - @shelf = File.readlines(path) - rescue - @shelf = Array.new - end - @path = path - end - def parse - unless @books - @books = Hash.new - (0...@shelf.size).step(2) do |i| - @books[@shelf[i].strip] = @shelf[i+1].strip - end - end - end - def save() - File.open(@path, "w") do |out| - @books.sort.each do |key,value| - out.puts(key) - out.puts("\t" + value) - end if @books - end - end - def update(year) - re = /^_tag_calendar_#{year}/ - unless @shelf.any? { |str| re.match(str) } - parse - @books["_tag_calendar_#{year}"] = "#{year}.otl" - save - end - end -end - -def update_shelf(year) - shelf = Shelf.new(CALENDAR + "/vo_calendar_shelf.otl") - shelf.update(year) -end - -CALENDAR = ARGV.shift - -ARGV.each do |arg| - - File.open(CALENDAR + "/" + arg + ".otl", "w") do |out| - - update_shelf(arg) - year = arg.to_i - d = Date.new(year, 1, 1) - out.puts year if MONTHINDENT == 1 - - while d.year == year - out.puts indent(0) + month(d) - month = d.month - while d.month == month - out.puts indent(1) + (TAGFORMAT % [d.year, d.month, d.day]) + - " " + DAYNAMES[d.wday] - DIARY.each do |item| - out.puts indent(2) + item - end - d += 1 - end - end - - end -end diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_readme.otl b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_readme.otl deleted file mode 100644 index 5761781..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_readme.otl +++ /dev/null @@ -1,195 +0,0 @@ -Outline Calendar 1.3 - What's new - in 1.3 - vimrc-script by Lee Bigelow for easy calendar access - small modifications to this outline - update from 1.2.2 - edit tagfile path in outline_calendar/vimrc - add 'source .../outline_calendar/vimrc' to your ~/.vimrc - in 1.2.2 - changed personal _tag_ set definition - : it may appear anywhere, but takes only next space-delimited - : word into account. The advantage is that I can set a tag - : behind a calendar date and jump to the current week via - : _tag_kalender - in 1.2.1 - removed spurious underscores in td function - in 1.2 - use ~/.vimoutlinerrc to avoid tagfile collisions - ,,d-dates usable as links into calendar - calendar dates (almost) without syntactic noise - update to documentation - in 1.1 - we are almost votl_maketags.pl-compatible again - you can use vo_calendar_shelf.otl to attach your calendar shelf to your outline tree - files follow vimoutliner naming convention - all installation files are kept within one directory - minor refinements to console user interface - defaults and samples are in English now - Prerequisites - ruby - used for generating the skeleton calendar and the shelf - could be replaced by perl, awk, python, ... - maybe even by a shell script or a small forth program ;-) - bash - use of special variable expansion in shell-frontend - ctags - create the tags-file for interoutline links and calendar access - regex support necessary - $ ctags --version - : Exuberant Ctags 5.5.1, Copyright (C) 1996-2003 Darren Hiebert - : Compiled: Aug 15 2003, 21:06:30 - : Addresses: , http://ctags.sourceforge.net - : Optional compiled features: +wildcards, +regex - vimoutliner - you should already have it - Known incompatibilities - none - Installation and Configuration - Installation - I recommend keeping all Outlines in one directory - it's easier on ctags - move the distribution folder there - : $ mv outline_calendar ~/Outlines - add another tag file to vim's lookup table - the following line should go into $HOME/.vimrc - : source ~/Outlines/outline_calendar/vimrc - configure the various scripts (see below) - source vo_calendar_ui.sh into your shell - $HOME/.bashrc is probably a good place for this - something like the following should do it - $ . $HOME/Outlines/outline_calendar/vo_calendar_ui.sh - you're ready to run - try - $ calgen 2005 2006 2007 - : you get three yearly calendars plus a shelf to - : access them through _tag_xxx linking - $ tagvout - : this should create a tag file inside the outline - : calendar directory - $ td - : now vimoutliner should be positioned on today - $ vim - in normal mode type \tS - enter a date after the prompt and hit return - the calendar should open in a new window - Configure the calendar layout in vo_calendar_generator.rb - Month layout - with MONTHINDENT=1 - 2006 - January - _2006-01-01_ Sun - _2006-01-02_ Mon - or with MONTHINDENT=0 - January 2006 - _2006-01-01_ Sun - _2006-01-02_ Mon - Optional diary headings for each day - with DIARY=[] - _2006-01-01_ Sun - _2006-01-02_ Mon - with DIARY=["Todo", "Billing", "Personal notes"] - _2006-01-01_ Sun - Todo - Billing - Personal notes - _2006-01-02_ Mon - Todo - Billing - Personal notes - change the language of the calendar - DAYNAMES - names of weekdays starting with Sunday - MONTHNAMES - names of months - calendar skeletons - need not be generated with the ruby script - but we do have an "API" to keep things compatible - : I suggest an approach that can be executed in - : the same way as my ruby script. If you did it - : with perl, you could call the script - : vo_calendar_generator.pl. - : Its first command line parameter should be the - : directory, where the calendar files are stored, - : the remaining parameters denote the years, for which - : calendar skeletons should be generated. - calendar shelf - do not edit manually, a really stupid parser (tm) is reading this - : it contains the _tag_ format links into the various - : yearly calendars. It is "parsed" (if you can call it - : that) to insert a newly created calendar in the correct - : position. - Configure the directory layout in vo_calendar_ui.sh - See the comments there for further explanations - Ideally you only have to set the variable OUTLINES, but YMMV - Configure tag harvesting in vo_calendar_ctags.conf - it should not need any changes - if it does, "man 1 ctags" is your friend - what it does, line by line - define a new language called outline - outline handling rules are applied only to .otl files - recognise headings starting with "_tag_ set " - everything after "_tag_ set " is considered as tag content - : this provides an alternative way of defining tags - : for both interoutline and intraoutline jumps. - : It can safely be removed without harming the - : outline calendar. - : If you keep it, your non-calendar tags will be - : stored in the calendar tagfile, too, but this should - : not be a problem. - recognise headings starting with a yyyy_mm_dd date - Underscore as date separator - are distinct from ,,d dates - date stamps will not be jumped to - date stamps will only be jumped from - they are mangled to hyphens as tag marker - plain ,,d dates can be used to enter the calendar from anywhere - all dates typed by you are in ISO-format yyyy-mm-dd - only tag outline files - handle files in subdirectories, too - show some impressive statistics - Usage - administrative - once: install and configure (see above) - rarely: generate a new calendar - $ calgen 2005 2006 2007 - this will go a long way - often: refresh the tag file - $ tagvout - you might even want to put it in your crontab - don't rely on shell functions there, use plain commands - modulo local changes the crontab entry would look like this: - : */10 * * * * /usr/bin/ctags -f $HOME/.vimoutliner/vo_tags.tag --options=$HOME/Outlines/outline_calendar/vo_calendar_ctags.conf $HOME/Outlines &> /dev/null - refresh tag file every 10 minutes - remove the configuration line --totals, you won't need it there - open calendar from running shell - edit today's calendar entries - $ td - : vimoutliner should open on today - : if you're running X, you'll get a gvim, otherwise a vim - : you'll be on today's entry - move around, add some items to the outline - move cursor on a ISO-format date yyyy-mm-dd and it - edit any available day - $ td 2005-05-04 - : release day - open calendar from running vim session - mappings for normal mode - \td and \tD - jump to today - \tc and \tC - jump to the date at the cursor position - \ts and \tS - ask for date to jump to - Notes - the mappings are defined as t... - the uppercase variant opens a new window within the current session - Author(s) - (c) Stefan Schmiedl 2005-05-04 - Contributors: - Lee Bigelow brought the \t? functions into existence - License - thou shalt neither sue nor blame me - it's worth what you paid for it - thou can do whatever else thou want to do with it - just remember to have fun on the way diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_shelf.otl b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_shelf.otl deleted file mode 100644 index d8224b0..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_shelf.otl +++ /dev/null @@ -1,6 +0,0 @@ -_tag_calendar_2003 - 2003.otl -_tag_calendar_2004 - 2004.otl -_tag_calendar_2005 - 2005.otl diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_ui.sh b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_ui.sh deleted file mode 100755 index 0d5b911..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_calendar/vo_calendar_ui.sh +++ /dev/null @@ -1,39 +0,0 @@ -# parent folder of all outlines -OUTLINES=$HOME/Outlines - -# folder for calendar files -# should be a subfolder of $OUTLINES -CALENDAR=$OUTLINES/outline_calendar - -# file for calendar tags -CALENDARTAGS=$CALENDAR/vo_calendar_tags.tag - -# folders to tag for interoutline links and calendar access -# if $CALENDAR is not below $OUTLINES, you need -# TAGFOLDERS=($OUTLINES $CALENDAR) -TAGFOLDERS=($OUTLINES) - -# script to generate calendar skeletons -CALGENSCRIPT=$CALENDAR/vo_calendar_generator.rb - -# option file for ctags -CTAGSOPTIONS=$CALENDAR/vo_calendar_ctags.conf - - -# you should not need to change anything below here -# that's what all the variables above are for -# ------------------------------------------------------------ - -function td() { - local date - date=${1:-`date +%Y-%m-%d`} - ${DISPLAY:+g}vim -c ":ta $date" $CALENDAR/${date%%-*}.otl -} - -function tagvout() { - ctags -f $CALENDARTAGS --options=$CTAGSOPTIONS ${TAGFOLDERS[*]} -} - -function calgen() { - $CALGENSCRIPT $CALENDAR $* -} diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/freemind.py b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/freemind.py deleted file mode 100755 index 99bebf8..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/freemind.py +++ /dev/null @@ -1,198 +0,0 @@ -#!/usr/bin/python2 - -''' -usage: - freemind.py -o [fmt] , where ofmt selects output format: {otl,mm} - -freemind.py -o otl : - Read in an freemind XML .mm file and generate a outline file - compatable with vim-outliner. -freemind.py -o mm : - Read in an otl file and generate an XML mind map viewable in freemind - -NOTE: - Make sure that you check that round trip on your file works. - -Author: Julian Ryde -''' -import sys -import getopt -import codecs - -import otl -import xml.etree.ElementTree as et -from xml.etree.ElementTree import XMLParser - -debug = False - - -class Outline: # The target object of the parser - depth = -1 - indent = '\t' - current_tag = None - - def start(self, tag, attrib): # Called for each opening tag. - self.depth += 1 - self.current_tag = tag - # print the indented heading - if tag == 'node' and self.depth > 1: - #if 'tab' in attrib['TEXT']: - #import pdb; pdb.set_trace() - print (self.depth - 2) * self.indent + attrib['TEXT'] - - def end(self, tag): # Called for each closing tag. - self.depth -= 1 - self.current_tag = None - - def data(self, data): - if self.current_tag == 'p': - bodyline = data.rstrip('\r\n') - bodyindent = (self.depth - 5) * self.indent + ": " - #textlines = textwrap.wrap(bodytext, width=77-len(bodyindent), - # break_on_hyphens=False) - #for line in textlines: - print bodyindent + bodyline - - def close(self): # Called when all data has been parsed. - pass - - -def mm2otl(*arg, **kwarg): - fname = arg[0][0] - file = codecs.open(fname, 'r', encoding='utf-8') - - filelines = file.readlines() - outline = Outline() - parser = XMLParser(target=outline, encoding='utf-8') - parser.feed(filelines[0].encode('utf-8')) - parser.close() - - -# TODO body text with manual breaks -# TODO commandline arguments for depth, maxlength etc. -# TODO do not read whole file into memory? -# TODO handle decreasing indent by more than one tab -# TODO handle body text lines sometimes not ending with space - -depth = 99 - - -def attach_note(node, textlines): - et.ElementTree - # Format should look like - # - # - # - # - # %s - # - # - # - notenode = et.SubElement(node, 'richcontent') - notenode.set('TYPE', 'NOTE') - htmlnode = et.SubElement(notenode, 'html') - bodynode = et.SubElement(htmlnode, 'body') - for line in textlines: - pnode = et.SubElement(bodynode, 'p') - pnode.text = line - - -def otl2mm(*arg, **kwarg): - fname = arg[0][0] - - # node ID should be based on the line number of line in the - # otl file for easier debugging - #for lineno, line in enumerate(open(fname)): - # enumerate starts at 0 I want to start at 1 - # FIXME freemind.py|107| W806 local variable 'lineno' is assigned to but never used - lineno = 0 - - mapnode = et.Element('map') - mapnode.set('version', '0.9.0') - - topnode = et.SubElement(mapnode, 'node') - topnode.set('TEXT', fname) - - parents = [mapnode, topnode] - - #left_side = True # POSITION="right" - - # read otl file into memory - filelines = codecs.open(fname, 'r', encoding='utf-8') - - # first handle the body texts turn it into a list of headings - # with associated body text for each one this is because the - # body text especially multi-line is what makes it awkward. - headings = [] - bodytexts = [] - for line in filelines: - if otl.is_heading(line): - headings.append(line) - bodytexts.append([]) - else: - # TODO this ': ' removal should go in otl.py? - bodytexts[-1].append(line.lstrip()[2:] + '\n') - - #import pdb; pdb.set_trace() - oldheading = '' - for heading, bodytext in zip(headings, bodytexts): - if debug: - print heading, bodytext - - level = otl.level(heading) - oldlevel = otl.level(oldheading) - - if level == oldlevel: - pass - elif level > oldlevel: - # about to go down in the hierarchy so add this line - # as a parent to the stack - # FIXME freemind.py|149| W802 undefined name 'node' - parents.append(node) - elif level < oldlevel: - # about to go up in the hierarchy so remove parents from the stack - leveldiff = oldlevel - level - parents = parents[:-leveldiff] - - node = et.SubElement(parents[-1], 'node') - node.set('TEXT', heading.lstrip().rstrip('\r\n')) - #if len(bodytext) > 0: - attach_note(node, bodytext) - - oldheading = heading - - xmltree = et.ElementTree(mapnode) - xmltree.write(sys.stdout, 'utf-8') - print - - -def usage(): - print "usage: %s -[mo] " % (sys.argv[0]) - - -def main(): - args = sys.argv - try: - opts, args = getopt.getopt(sys.argv[1:], 'moh', [""]) - except getopt.GetoptError, err: - usage() - print str(err) - sys.exit(2) - - for o, a in opts: - if o == "-m": - otl2mm(args) - elif o == "-o": - mm2otl(args) - elif o == "-h": - usage() - sys.exit(0) - else: - usage() - assert False, "unhandled option: %s" % o - return args - -if __name__ == "__main__": - main() - -# vim: set noet : diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/freemind_outline.py b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/freemind_outline.py deleted file mode 100644 index 5930cfb..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/freemind_outline.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/python2 -'''Converts a freemind xml .mm file to an outline file compatable with vim -outliner. - -Make sure that you check that round trip on your file works. - -Author: Julian Ryde -''' -import sys -from xml.etree.ElementTree import XMLParser -import textwrap -import codecs - -class Outline: # The target object of the parser - depth = -1 - indent = '\t' - current_tag = None - def start(self, tag, attrib): # Called for each opening tag. - self.depth += 1 - self.current_tag = tag - # print the indented heading - if tag == 'node' and self.depth > 1: - #if 'tab' in attrib['TEXT']: - #import pdb; pdb.set_trace() - print (self.depth-2)*self.indent + attrib['TEXT'] - def end(self, tag): # Called for each closing tag. - self.depth -= 1 - self.current_tag = None - def data(self, data): - if self.current_tag == 'p': - bodyline = data.rstrip('\r\n') - bodyindent = (self.depth-5)*self.indent + ": " - #textlines = textwrap.wrap(bodytext, width=77-len(bodyindent), break_on_hyphens=False) - #for line in textlines: - print bodyindent + bodyline - - def close(self): # Called when all data has been parsed. - pass - -outline = Outline() -parser = XMLParser(target=outline, encoding='utf-8') - -fname = sys.argv[1] -file = codecs.open(fname, 'r', encoding='utf-8') -filelines = file.readlines(); -print "filelines", type(filelines[0]), filelines[0] -parser.feed(filelines[0].encode('utf-8')) -parser.close() diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/otl.py b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/otl.py deleted file mode 100644 index 9268fdc..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/otl.py +++ /dev/null @@ -1,26 +0,0 @@ -# Some integer IDs -# headings are 1, 2, 3, .... -bodynowrap = -1 # ; -bodywrap = 0 # : - -def level(line): - '''return the heading level 1 for top level and down and 0 for body text''' - if line.lstrip().find(':')==0: return bodywrap - if line.lstrip().find(';')==0: return bodynowrap - strstart = line.lstrip() # find the start of text in lin - x = line.find(strstart) # find the text index in the line - n = line.count("\t",0,x) # count the tabs - return(n+1) # return the count + 1 (for level) - -def is_bodywrap(line): - return level(line) == bodywrap - -def is_bodynowrap(line): - return level(line) == bodynowrap - -def is_heading(line): - return level(line) > 0 - -def is_body(line): - return not is_heading(line) - diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/outline_freemind.py b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/outline_freemind.py deleted file mode 100755 index cea78da..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/outline_freemind.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/python2 -'''Read in an otl file and generate an xml mind map viewable in freemind - -Make sure that you check that round trip on your file works. - -Author: Julian Ryde -''' - -import sys -import os -import xml.etree.ElementTree as et -import otl -import codecs - -fname = sys.argv[1] -max_length = 40 -depth = 99 - -debug = False - -# TODO body text with manual breaks -# TODO commandline arguments for depth, maxlength etc. -# TODO do not read whole file into memory? -# TODO handle decreasing indent by more than one tab -# TODO handle body text lines sometimes not ending with space - -otlfile = open(fname) -indent = ' ' - -def attach_note(node, textlines): - et.ElementTree - # Format should look like - # - # - # - # - # %s - # - # - # - notenode = et.SubElement(node, 'richcontent') - notenode.set('TYPE', 'NOTE') - htmlnode = et.SubElement(notenode, 'html') - headnode = et.SubElement(htmlnode, 'head') - bodynode = et.SubElement(htmlnode, 'body') - for line in textlines: - pnode = et.SubElement(bodynode, 'p') - pnode.text = line - -# node ID should be based on the line number of line in the otl file for easier -# debugging -#for lineno, line in enumerate(open(fname)): -# enumerate starts at 0 I want to start at 1 -lineno = 0 - -mapnode = et.Element('map') -mapnode.set('version', '0.9.0') - -topnode = et.SubElement(mapnode, 'node') -topnode.set('TEXT', fname) - -parents = [mapnode, topnode] - -#left_side = True # POSITION="right" - -# read otl file into memory -filelines = codecs.open(fname, 'r', encoding='utf-8') - -# remove those that are too deep or body text and pesky end of line characters -#filelines = [line.rstrip('\r\n') for line in filelines if otl.level(line) <= depth] -#filelines = [line for line in filelines if otl.is_heading(line)] - -# first handle the body texts turn it into a list of headings with associated -# body text for each one this is because the body text especially multi-line is -# what makes it awkward. -headings = [] -bodytexts = [] -for line in filelines: - if otl.is_heading(line): - headings.append(line) - bodytexts.append([]) - else: - # TODO this ': ' removal should go in otl.py? - bodytexts[-1].append(line.lstrip()[2:] + '\n') - -#import pdb; pdb.set_trace() -oldheading = '' -for heading, bodytext in zip(headings, bodytexts): - if debug: print heading, bodytext - - level = otl.level(heading) - oldlevel = otl.level(oldheading) - - if level == oldlevel: - pass - elif level > oldlevel: - # about to go down in the hierarchy so add this line as a parent to the - # stack - parents.append(node) - elif level < oldlevel: - # about to go up in the hierarchy so remove parents from the stack - leveldiff = oldlevel - level - parents = parents[:-leveldiff] - - node = et.SubElement(parents[-1], 'node') - node.set('TEXT', heading.lstrip().rstrip('\r\n')) - #if len(bodytext) > 0: - attach_note(node, bodytext) - - oldheading = heading - -xmltree = et.ElementTree(mapnode) -xmltree.write(sys.stdout, 'utf-8') -print diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/test.otl b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/test.otl deleted file mode 100644 index dd918c6..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/test.otl +++ /dev/null @@ -1,27 +0,0 @@ -A - : This is some early multi-line body text which should wrap. This is some - : early multi-line body text which should wrap. This is some early - : multi-line body text which should wrap. - a - : single line body text - b - 1 - c -B - d - 2 - 3 - 4 -C - -This is a very long heading line that should be longer than the wrap width and so tests this case -Heading with a tab in the middle - : body text with tab in it -Body text with empy line in it - : First line - : - : Third line -Difficult characters - [_] ' " & -Last line body text - : This is a last line of body text diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/test.sh b/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/test.sh deleted file mode 100755 index 15607a1..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/outline_freemind/test.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -tmp=/tmp -dirname=`dirname $0` -fname=$dirname/test.otl -[ -n "$1" ] && fname=$1 - -$dirname/freemind.py -m $fname > $tmp/test.mm -$dirname/freemind.py -o $tmp/test.mm > $tmp/return.otl -diff -Nur $fname $tmp/return.otl diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/vo2html.rb b/pack/acp/start/vimoutliner/vimoutliner/scripts/vo2html.rb deleted file mode 100644 index a4faa03..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/vo2html.rb +++ /dev/null @@ -1,329 +0,0 @@ -#! /usr/bin/ruby - -# = Synopsis -# -# vo2xo: Converts VIM Outliner files to HTML slides. -# -# = Usage -# -# vo2html [OPTION] input-file -# -# -?, --help: show help -# -# -h, --head file-name: -# insert the contents of the named file within the HTML HEAD element. -# -# -b, --body file-name: -# insert the contents of the named file just after the start of the HTML BODY element. -# -# -t, --tail file-name: -# insert the contents of the named file just before the end the HTML BODY element. -# -# input-file: The VIM Outliner file to be converted. - -# LICENSE -# Copyright (C) 2006 Bruce Perens -# -# This license incorporates by reference the terms of GPL Version 3 or, at -# your choice, any later version of the GPL published by the Free Software -# Foundation, Inc. of Boston, MA, USA. -# -# You may not modify this license. You must preserve it and the accompanying -# copyright declaration in any whole or fragmentary verisons of the software -# to which they apply. -# -require 'getoptlong' -require 'rdoc/usage' -require 'rubygems' -require 'builder' -gem 'ruby-mp3info' -require 'mp3info' - -class OutlineParser -private - LeadingTabPattern = /^(\t*)(.*)$/.freeze - ColonPattern = /^:[ \t]*(.*)$/.freeze - -protected - def initialize(file) - @file = file - @pushback = nil - @nesting = 0 - end - - # Get a line, with push-back. - def get_line - if (line = @pushback) - @pushback = nil - return line - else - return @file.gets - end - end - - # Recursive parser for VIM Outliner. - # - # Meant to be called from itself when nesting increases - it calls its - # callers "nest" method, which calls "parse". This fits well with nesting - # output paradigms like that of Builder::XmlMarkup. - # - # Returns when nesting decreases, or if got_heading is set, just before the - # next top-level heading in the input stream. You should iteratively call - # parse() until more() returns false. This facilitates per-heading handling - # such as in the Xoxo converter, which uses first-level heading to demarcate - # the boundaries of slides. - # - # got_heading: If set, this will return just before the next top-level - # heading, leaving it in the push-back. - # - def parse(got_heading = false) - - while (line = get_line()) - m = line.match(LeadingTabPattern) - n = m[1].length # This line's nesting level. - after_tabs = m[2] # Content after zero or more leading tabs. - - # Drop empty lines, and lines with only tabs. - next if after_tabs == '' - - if n != @nesting # The nesting level changes with this line. - previous = @nesting - @nesting = n - @pushback = line - - # If nesting increases, recursively parse it through nest(). - # If nesting decreases, return to nest(), which will in turn - # return here. Both of these can be true in sequence! Nest() - # detects when a nesting level is closed by looking ahead one - # line and then pushing it back. That line can be one or MORE - # levels lesser than the current nesting level. - # - nest(n) if n > previous - return true if n < previous - elsif - if (p = after_tabs.match(ColonPattern)) and p[1].length > 0 - text(p[1], n) - else - if got_heading and n == 0 - @pushback = line - return true # Return before the next top-level heading. - end - - got_heading = true - heading(after_tabs, n) - end - end - end - false - end - -public -# Simple parser that returns true if there is any remaining content - # and leaves that content in the push-back. - # The return value is the content minus any leading tabs. - # - # Usage - # Return true if there is more content: - # if more - # Return the content of the next line to be read. - # more - # - # The second form is used to get the document title from the first line - # in the file. - # - def more - while (line = get_line()) - if (m = line.match(LeadingTabPattern)) and m[2].length > 0 - @pushback = line - return m[2] - end - end - false - end - -end - -class OutlineToHTML < OutlineParser -private - Type = [ :DOCTYPE, - :html, - :PUBLIC, - '-//W3C//DTD XHTML 1.0 Strict//EN', - 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd' - ].freeze - - def wrap(nesting) - if nesting > 1 - @x.li { yield } - else - yield - end - end - -protected - def heading(text, nesting) - if nesting == 0 - @x.h1(text) - else - @x.li(text) - end - end - - def nest(nesting) - wrap(nesting) { @x.ul(:class => "list-#{nesting}") { parse(true) } } - end - - def text(t, nesting) - @x.p(t) - end - -public - def initialize(input_file, head_insert, body_insert, tail_insert) - @head_insert = head_insert.read if head_insert - @body_insert = body_insert.read if body_insert - @tail_insert = tail_insert.read if tail_insert - super(input_file) - end - - def convert - n = 0 - presentation_title = more - - while (title = more) - audio_filename = "#{n + 1}.mp3" - next_audio_filename = "#{n + 2}.mp3" - - @x = ::Builder::XmlMarkup.new(:indent => 2) - @x.declare!(*Type) - @x.html { - body_parameters = {} - - @x.head { - if title != presentation_title - @x.title("#{presentation_title} - #{title}") - else - @x.title("#{presentation_title}") - end - - @x << eval('"' + @head_insert + '"') if @head_insert - - if File.exists?(audio_filename) - seconds = nil - - Mp3Info.open(audio_filename) { |mp3| - seconds = mp3.length.ceil + 1 - } - - parameters = { - :'http-equiv' => 'refresh', - :content => "#{seconds};url=#{n + 2}.html" - } - @x.meta(parameters) - if File.exists?(next_audio_filename) - program = "function Preload() { a = new Image(); a.src = '#{next_audio_filename}'; p = new Image(); p.src = '#{n + 2}.html' }" - @x.script(program, :language => 'JavaScript') - body_parameters[:onload] = "Preload()" - end - end - } - @x.body(body_parameters) { - @x << eval('"' + @body_insert + '"') if @body_insert - attributes = { :class => 'content' } - # Fix: I don't yet know if this is the last slide, so I can't - # decide whether to do this onclick action or not. - # Oops. We have to generate the body tag after its contents. - # This might be awkward to do within Builder. - attributes[:onclick] = "document.location='#{n + 2}.html'" - @x.div(attributes) { - parse(false) - } - @x.div(:class => 'bottom') { - @x << eval('"' + @tail_insert + '"') if @tail_insert - - @x.div(:class => 'navbar-wrapper') { - @x.ul(:class => 'navbar') { - @x.li(:class => 'previous') { - if n > 0 - @x.a('Previous', :href => "#{n}.html") - end - } - - @x.li(:class => 'top') { - @x.a(presentation_title, :href => "1.html") - } - - @x.li(:class => 'next') { - if more - @x.a('Next', :href => "#{n + 2}.html") - end - } - } - } - if File.exists?(audio_filename) - @x.object(:type => 'audio/mpeg', :data => audio_filename, :width => "95%", :height => 42) { - message = "Your web browser isn't configured correctly to play the audio file #{audio_filename}, and thus you are missing the sound-track to this program." - - @x.param(:name => 'autoplay', :value => true) - @x.param(:name => 'playcount', :value => 1) - @x.param(:name => 'showcontrols', :value => false) - @x.param(:name => 'showdisplay', :value => false) - @x.span(message, :class => 'error') - } - end - } - } - } - File.open("#{n += 1}.html", "w") { |f| - f.write(@x.target!) - } - @x = nil - end - end - -end - - -opts = GetoptLong.new( - [ '--help', '-?', GetoptLong::NO_ARGUMENT ], - [ '--head', '-h', GetoptLong::REQUIRED_ARGUMENT ], - [ '--body', '-b', GetoptLong::REQUIRED_ARGUMENT ], - [ '--tail', '-t', GetoptLong::REQUIRED_ARGUMENT ] -) - -head_insert = nil -body_insert = nil -tail_insert = nil - -begin - opts.each do |opt, arg| - case opt - when '--help' - RDoc::usage - when '--head' - head_insert = File.new(arg, 'r') - when '--body' - body_insert = File.new(arg, 'r') - when '--tail' - tail_insert = File.new(arg, 'r') - end - end - - if ARGV.length != 1 - RDoc::usage - exit 0 - end - - input_file = File.new(ARGV[0], 'r') -rescue Exception => error - $stderr.print("Error: #{error}\n") - exit(1) -end - -c = OutlineToHTML.new(input_file, head_insert, body_insert, tail_insert) -if not c.more - $stderr.write("Error: Input file contains no content.\n") - exit(1) -end - -c.convert -exit(0) diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/vo2odp.rb b/pack/acp/start/vimoutliner/vimoutliner/scripts/vo2odp.rb deleted file mode 100644 index 963fcf3..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/vo2odp.rb +++ /dev/null @@ -1,415 +0,0 @@ -#! /usr/bin/ruby - -# = Synopsis -# -# vo2xo: Converts VIM Outliner files to OpenDocument presentations. -# -# = Usage -# -# vo2odp [OPTION] input-file output-file -# -# -?, --help: show help -# -# input-file: The VIM Outliner file to be converted. - -# LICENSE -# Copyright (C) 2006 Bruce Perens -# -# You may apply the terms of GPL Version 3 or, at your choice, any later -# version of the GPL published by the Free Software Foundation, Inc. of -# Boston, MA, USA, to this software. -# -# You may not modify this license. You must preserve it and the accompanying -# copyright declaration in any whole or fragmentary verisons of the software -# to which they apply. -# -require 'getoptlong' -require 'rdoc/usage' -require 'rubygems' -require_gem 'builder' -require_gem 'rubyzip' -require 'zip/zipfilesystem' - -class OutlineParser -private - LeadingTabPattern = /^(\t*)(.*)$/.freeze - ColonPattern = /^:[ \t]*(.*)$/.freeze - -protected - def initialize(file) - @file = file - @pushback = nil - @nesting = 0 - end - - # Get a line, with push-back. - def get_line - if (line = @pushback) - @pushback = nil - return line - else - return @file.gets - end - end - - # Recursive parser for VIM Outliner. - # - # Meant to be called from itself when nesting increases - it calls its - # callers "nest" method, which calls "parse". This fits well with nesting - # output paradigms like that of Builder::XmlMarkup. - # - # Returns when nesting decreases, or if got_heading is set, just before the - # next top-level heading in the input stream. You should iteratively call - # parse() until more() returns false. This facilitates per-heading handling - # such as in the Xoxo converter, which uses first-level heading to demarcate - # the boundaries of slides. - # - # got_heading: If set, this will return just before the next top-level - # heading, leaving it in the push-back. - # - def parse(got_heading = false) - - while (line = get_line()) - m = line.match(LeadingTabPattern) - n = m[1].length # This line's nesting level. - after_tabs = m[2] # Content after zero or more leading tabs. - - # Drop empty lines, and lines with only tabs. - next if after_tabs == '' - - if n != @nesting # The nesting level changes with this line. - previous = @nesting - @nesting = n - @pushback = line - - # If nesting increases, recursively parse it through nest(). - # If nesting decreases, return to nest(), which will in turn - # return here. Both of these can be true in sequence! Nest() - # detects when a nesting level is closed by looking ahead one - # line and then pushing it back. That line can be one or MORE - # levels lesser than the current nesting level. - # - nest(n) if n > previous - return true if n < previous - elsif - if (p = after_tabs.match(ColonPattern)) and p[1].length > 0 - text(p[1], n) - else - if got_heading and n == 0 - @pushback = line - return true # Return before the next top-level heading. - end - - got_heading = true - heading(after_tabs, n) - end - end - end - false - end - -public - # Simple parser that return true if there is any remaining content - # and leaves that content in the push-back. - # The return value is the content minus any leading tabs. - # - # Usage - # Return true if there is more content: - # if more - # Return the content of the next line to be read. - # more - # - # The second form is used to get the document title from the first line - # in the file. - # - def more - while (line = get_line()) - if (m = line.match(LeadingTabPattern)) and m[2].length > 0 - @pushback = line - return m[2] - end - end - false - end - -end - -module OpenDocument -end -module OpenDocument::Presentation -private - DocumentAttributes = { - :'office:version' => '1.0', - :'xmlns:anim' => 'urn:oasis:names:tc:opendocument:xmlns:animation:1.0', - :'xmlns:chart' => 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0', - :'xmlns:dc' => 'http://purl.org/dc/elements/1.1/', - :'xmlns:dom' => 'http://www.w3.org/2001/xml-events', - :'xmlns:dr3d' => 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0', - :'xmlns:draw' => 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0', - :'xmlns:fo' => 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0', - :'xmlns:form' => 'urn:oasis:names:tc:opendocument:xmlns:form:1.0', - :'xmlns:math' => 'http://www.w3.org/1998/Math/MathML', - :'xmlns:meta' => 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0', - :'xmlns:number' => 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0', - :'xmlns:office' => 'urn:oasis:names:tc:opendocument:xmlns:office:1.0', - :'xmlns:ooo' => 'http://openoffice.org/2004/office', - :'xmlns:oooc' => 'http://openoffice.org/2004/calc', - :'xmlns:ooow' => 'http://openoffice.org/2004/writer', - :'xmlns:presentation' => 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0', - :'xmlns:script' => 'urn:oasis:names:tc:opendocument:xmlns:script:1.0', - :'xmlns:smil' => 'urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0', - :'xmlns:style' => 'urn:oasis:names:tc:opendocument:xmlns:style:1.0', - :'xmlns:svg' => 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0', - :'xmlns:table' => 'urn:oasis:names:tc:opendocument:xmlns:table:1.0', - :'xmlns:text' => 'urn:oasis:names:tc:opendocument:xmlns:text:1.0', - :'xmlns:xforms' => 'http://www.w3.org/2002/xforms', - :'xmlns:xlink' => 'http://www.w3.org/1999/xlink', - :'xmlns:xsd' => 'http://www.w3.org/2001/XMLSchema', - :'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance', - }.freeze - - - # Bullet style for a particular indentation level. - def bullet_style(x, level, char, space_before, label_width, font_size) - x.tag!('text:list-level-style-bullet', :'text:level' => level, - :'text:bullet-char' => char) { - if level > 1 - x.tag!('style:list-level-properties', - :'text:space-before' => space_before, - :'text:min-label-width' => label_width) - end - x.tag!('style:text-properties', :'fo:font-family' => 'StarSymbol', - :'style:use-window-font-color' => 'true', :'fo:font-size' => font_size) - } - end - - # Paragraph style for a particular level. - def paragraph_style(x, name, left_margin, text_indent) - x.tag!('style:style', :'style:name' => name, - :'style:family' => 'paragraph') { - x.tag!('style:paragraph-properties', :'fo:margin-left' => left_margin, - :'fo:margin-right' => '0cm', :'fo:text-indent' => text_indent) - - } - end - - # Presentation style. - def presentation_style(x, name, parent, min_font_height, additional = {}) - x.tag!('style:style', :'style:name' => name, - :'style:family' => 'presentation', - :'style:parent-style-name' => parent) { - x.tag!('style:graphic-properties', {:'draw:fill-color' => '#ffffff', - :'fo:min-height' => min_font_height}.merge(additional)) - } - end - - # OpenOffice automatic styles. - # I started with a normal output file of OpenOffice, and attempted to compress - # the information: not for efficiency, but to make it understandable. The - # output should be close to identical. - # - def automatic_styles(x) - x.tag!('office:automatic-styles') { - - shared = { :'presentation:display-footer' => 'true', - :'presentation:display-page-number' => 'false', - :'presentation:display-date-time' => 'true' } - - x.tag!('style:style', :'style:name' => 'dp1', :'style:family' => 'drawing-page') { - x.tag!('style:drawing-page-properties', - { :'presentation:background-visible' => 'true', - :'presentation:background-objects-visible' => 'true' }.merge(shared)) - } - x.tag!('style:style', :'style:name' => 'dp2', :'style:family' => 'drawing-page') { - x.tag!('style:drawing-page-properties', - { :'presentation:display-header' => 'true' }.merge(shared)) - } - - x.tag!('style:style', :'style:name' => 'gr1', :'style:family' => 'graphic') { - x.tag!('style:graphic-properties', :'style:protect' => 'size') - } - - presentation_style(x, 'pr1', 'Default-title', '3.256cm') - presentation_style(x, 'pr2', 'Default-outline1', '13.609cm') - presentation_style(x, 'pr3', 'Default-notes', '12.573cm', - :'draw:auto-grow-height' => 'true') - - paragraph_style(x, 'P1', '0cm', '0cm') - paragraph_style(x, 'P2', '1.2cm', '-0.9cm') - paragraph_style(x, 'P3', '0.6cm', '-0.6cm') - - x.tag!('text:list-style', :'style:name' => 'L1') { - 1.upto(9) { |n| - bullet_style(x, n, :'â—', "#{(n - 1) * 0.6}cm", '0.6cm', - '45%') - } - } - x.tag!('text:list-style', :'style:name' => 'L2') { - bullet_style(x, 1, :'â—', '0.6cm', '0.9cm', '45%') - bullet_style(x, 2, :'–', '1.6cm', '0.8cm', '75%') - bullet_style(x, 3, :'â—', '3.0cm', '0.6cm', '45%') - bullet_style(x, 4, :'–', '4.2cm', '0.6cm', '75%') - bullet_style(x, 5, :'â—', '5.4cm', '0.6cm', '45%') - bullet_style(x, 6, :'â—', '6.6cm', '0.6cm', '45%') - bullet_style(x, 7, :'â—', '7.8cm', '0.6cm', '45%') - bullet_style(x, 8, :'â—', '9.0cm', '0.6cm', '45%') - bullet_style(x, 9, :'â—', '10.2cm', '0.6cm', '45%') - } - } - end - -public - def wrap(x) - x.instruct! - x.tag!('office:document-content', DocumentAttributes) { - automatic_styles(x) - x.tag!('office:body') { - x.tag!('office:presentation') { - yield(x) - } - } - } - x - end -end - -class OpenDocument::Manifest -public - def add(path, type) - @files[path] = type - end - - def content - x = Builder::XmlMarkup.new(:indent => 2) - x.instruct! - x.tag!('manifest:manifest', - :'xmlns:manifest' => 'urn:oasis:names:tc:opendocument:xmlns:manifest:1.0') { - x.tag!('manifest:file-entry', - :'manifest:media-type' => \ - 'application/vnd.oasis.opendocument.presentation', - :'manifest:full-path' => '/') - @files.each { |k, v| - x.tag!('manifest:file-entry', :'manifest:media-type' => v, - :'manifest:full-path' => k) - } - } - x.target! - end - - def initialize - @files = {} - end -end - -class OutlineToODP < OutlineParser - include OpenDocument::Presentation - -protected - def nest_headings(text, nesting, recurse) - @x.tag!('text:list-item') { - if recurse == 0 - @x.tag!('text:p', :'text:style-name' => "P#{nesting + 1}") { - @x << text - @x << "\n" - } - else - @x.tag!('text:list') { nest_headings(text, nesting, recurse - 1) } - end - } - end - - def heading(text, nesting) - if nesting == 0 - @x.tag!('draw:page', :'draw:name' => text, :'draw:style-name' => 'dp1', - :'draw:master-page-name' => 'Default', - :'presentation:presentation-page-layout-name' => 'AL1T2') { - @x.tag!('draw:frame', :'presentation:style-name' => 'pr1', - :'draw:layer' => 'layout', :'svg:width' => '25.199cm', - :'svg:height' => '3.256cm', :'svg:x' => '1.4cm', :'svg:y' => '0.962cm', - :'presentation:class' => 'title', :'presentation:placeholder' => true) { - @x.tag!('draw:text-box') { - @x.tag!('text:p', :'text:style-name' => 'P1') { - @x << text - @x << "\n" - } - } - } - @x.tag!('draw:frame', :'presentation:style-name' => 'pr2', - :'draw:layer' => 'layout', :'svg:width' => '25.199cm', - :'svg:height' => '13.609cm', :'svg:x' => '1.4cm', :'svg:y' => '4.914cm', - :'presentation:class' => 'outline', :'presentation:placeholder' => true) { - @x.tag!('draw:text-box') { - parse(true) - } - } - } - else - @x.tag!('text:list', :'text:style-name' => 'L2') { - nest_headings(text, nesting, nesting - 1) - } - end - end - - def nest(nesting) - parse(true) - end - - def text(t, nesting) - end - -public - def initialize(input_file) - super(input_file) - end - - def convert - @x = Builder::XmlMarkup.new(:indent => 2) - wrap(@x) { - while more - parse(false) - end - } - @x.target! - end -end - - -opts = GetoptLong.new( - [ '--help', '-?', GetoptLong::NO_ARGUMENT ] -) - -begin - opts.each do |opt, arg| - case opt - when '--help' - RDoc::usage - end - end - - if ARGV.length != 2 - RDoc::usage - exit 0 - end - - input_file = File.new(ARGV[0], 'r') - output_file = Zip::ZipFile.open(ARGV[1], Zip::ZipFile::CREATE) -rescue Exception => error - $stderr.print("Error: #{error}\n") - exit(1) -end - -c = OutlineToODP.new(input_file) -if not c.more - $stderr.write("Error: Input file contains no content.\n") - exit(1) -end - - manifest = OpenDocument::Manifest.new - output_file.file.open('content.xml', 'w') { |f| f.write(c.convert) } - manifest.add('content.xml', 'text/xml') - output_file.dir.mkdir('META-INF') - output_file.file.open('META-INF/manifest.xml', 'w') { |f| - f.write(manifest.content) - } - output_file.close -exit(0) diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/vo2xo.rb b/pack/acp/start/vimoutliner/vimoutliner/scripts/vo2xo.rb deleted file mode 100644 index 4c59000..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/vo2xo.rb +++ /dev/null @@ -1,239 +0,0 @@ -#! /usr/bin/ruby - -# = Synopsis -# -# vo2xo: Converts VIM Outliner files to Xoxo presentations. -# -# = Usage -# -# vo2xo [OPTION] input-file -# -# -?, --help: show help -# -# -b, --body file-name: -# insert the contents of the named file at the start of the HTML BODY element. -# -# -h, --head file-name: -# insert the contents of the named file within the HTML HEAD element. -# -# input-file: The VIM Outliner file to be converted. - -# LICENSE -# Copyright (C) 2006 Bruce Perens -# -# This license incorporates by reference the terms of GPL Version 3 or, at -# your choice, any later version of the GPL published by the Free Software -# Foundation, Inc. of Boston, MA, USA. -# -# You may not modify this license. You must preserve it and the accompanying -# copyright declaration in any whole or fragmentary verisons of the software -# to which they apply. -# -require 'getoptlong' -require 'rdoc/usage' -require 'rubygems' -require_gem 'builder' - -class OutlineParser -private - LeadingTabPattern = /^(\t*)(.*)$/.freeze - ColonPattern = /^:[ \t]*(.*)$/.freeze - -protected - def initialize(file) - @file = file - @pushback = nil - @nesting = 0 - end - - # Get a line, with push-back. - def get_line - if (line = @pushback) - @pushback = nil - return line - else - return @file.gets - end - end - - # Recursive parser for VIM Outliner. - # - # Meant to be called from itself when nesting increases - it calls its - # callers "nest" method, which calls "parse". This fits well with nesting - # output paradigms like that of Builder::XmlMarkup. - # - # Returns when nesting decreases, or if got_heading is set, just before the - # next top-level heading in the input stream. You should iteratively call - # parse() until more() returns false. This facilitates per-heading handling - # such as in the Xoxo converter, which uses first-level heading to demarcate - # the boundaries of slides. - # - # got_heading: If set, this will return just before the next top-level - # heading, leaving it in the push-back. - # - def parse(got_heading = false) - - while (line = get_line()) - m = line.match(LeadingTabPattern) - n = m[1].length # This line's nesting level. - after_tabs = m[2] # Content after zero or more leading tabs. - - # Drop empty lines, and lines with only tabs. - next if after_tabs == '' - - if n != @nesting # The nesting level changes with this line. - previous = @nesting - @nesting = n - @pushback = line - - # If nesting increases, recursively parse it through nest(). - # If nesting decreases, return to nest(), which will in turn - # return here. Both of these can be true in sequence! Nest() - # detects when a nesting level is closed by looking ahead one - # line and then pushing it back. That line can be one or MORE - # levels lesser than the current nesting level. - # - nest(n) if n > previous - return true if n < previous - elsif - if (p = after_tabs.match(ColonPattern)) and p[1].length > 0 - text(p[1], n) - else - if got_heading and n == 0 - @pushback = line - return true # Return before the next top-level heading. - end - - got_heading = true - heading(after_tabs, n) - end - end - end - false - end - -public - # Simple parser that return true if there is any remaining content - # and leaves that content in the push-back. - # The return value is the content minus any leading tabs. - # - # Usage - # Return true if there is more content: - # if more - # Return the content of the next line to be read. - # more - # - # The second form is used to get the document title from the first line - # in the file. - # - def more - while (line = get_line()) - if (m = line.match(LeadingTabPattern)) and m[2].length > 0 - @pushback = line - return m[2] - end - end - false - end - -end - -class OutlineToXoxo < OutlineParser -private - Type = [ :DOCTYPE, - :html, - :PUBLIC, - '-//W3C//DTD XHTML 1.0 Strict//EN', - 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd' - ].freeze - - -protected - def heading(text, nesting) - if nesting == 0 - @x.h1(text) - else - @x.li { @x.tag!("h#{nesting + 1}", text) } - end - end - - def nest(nesting) - if nesting == 1 - @x.ul { parse(true) } - else - @x.li(:class => 'nesting') { @x.ul { parse(true) } } - end - end - - def text(t, nesting) - @x.p(t) - end - -public - def initialize(input_file, head_insert, body_insert) - @head_insert = head_insert - @body_insert = body_insert - super(input_file) - end - - def convert - @x = Builder::XmlMarkup.new(:indent => 2) - @x.declare!(*Type) - @x.html { - @x.head { - @x.title(more) - @x << @head_insert.read if @head_insert - } - @x.body { - @x << @body_insert.read if @body_insert - @x.ul { - @x.li(:class => "slide") { parse(false) } while more - } - } - } - @x.target! - end - -end - - -opts = GetoptLong.new( - [ '--help', '-?', GetoptLong::NO_ARGUMENT ], - [ '--body', '-b', GetoptLong::REQUIRED_ARGUMENT ], - [ '--head', '-h', GetoptLong::REQUIRED_ARGUMENT ] -) - -body_insert = nil -head_insert = nil - -begin - opts.each do |opt, arg| - case opt - when '--help' - RDoc::usage - when '--body' - body_insert = File.new(arg, 'r') - when '--head' - head_insert = File.new(arg, 'r') - end - end - - if ARGV.length != 1 - RDoc::usage - exit 0 - end - - input_file = File.new(ARGV[0], 'r') -rescue Exception => error - $stderr.print("Error: #{error}\n") - exit(1) -end - -c = OutlineToXoxo.new(input_file, head_insert, body_insert) -if not c.more - $stderr.write("Error: Input file contains no content.\n") - exit(1) -end - -$stdout.write(c.convert) -exit(0) diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/votl_maketags.1 b/pack/acp/start/vimoutliner/vimoutliner/scripts/votl_maketags.1 deleted file mode 100644 index 7a1c60b..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/votl_maketags.1 +++ /dev/null @@ -1,50 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.\" First parameter, NAME, should be all caps -.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection -.\" other parameters are allowed: see man(7), man(1) -.TH vo_maketags 1 "August 13, 2003" -.\" Please adjust this date whenever revising the manpage. -.\" -.\" Some roff macros, for reference: -.\" .nh disable hyphenation -.\" .hy enable hyphenation -.\" .ad l left justify -.\" .ad b justify to both left and right margins -.\" .nf disable filling -.\" .fi enable filling -.\" .br insert line break -.\" .sp insert n+1 empty lines -.\" for manpage-specific macros, see man(7) -.SH NAME -vo_maketags \- build TAGS for vim outliner -.SH SYNOPSIS -.B vo_maketags -.RI [ filename ] -.SH DESCRIPTION -This manual page documents briefly the -.B vo_maketags -Perl script. -.PP -.B vo_maketags -is a -.BR perl (1) -script that creates tag file which works with -.B vimoutliner -.RB ( vim (1) -plugin for editing outlines). -.SH OPTIONS -.B vo_maketags -script called just with filename of the processed outline, which -is a top of the hierarchy of linked outlines. -.SH SEE ALSO -.BR vim (1) -.ig -.br -The script is fully documented on -.UR http://www.vimoutliner.org -http://www.vimoutliner.org -.UE -.. -.SH AUTHOR -This manual page was written by Matej Cepl , -for the Debian GNU/Linux system (but may be used by others). diff --git a/pack/acp/start/vimoutliner/vimoutliner/scripts/votl_maketags.pl b/pack/acp/start/vimoutliner/vimoutliner/scripts/votl_maketags.pl deleted file mode 100644 index ff6d3ee..0000000 --- a/pack/acp/start/vimoutliner/vimoutliner/scripts/votl_maketags.pl +++ /dev/null @@ -1,338 +0,0 @@ -#!/usr/bin/perl -w -# ####################################################################### -# votl_maketags.pl: Vim outline tagging system, main program, version 0.3.5 -# Copyright (C) 2001-2003, 2011 by Steve Litt (slitt@troubleshooters.com) -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# Steve Litt, slitt@troubleshooters.com, http://www.troubleshooters.com -# ####################################################################### - -# ####################################################################### -# ####################################################################### -# ####################################################################### -# HISTORY -# V0.1.0 Pre-alpha -# Starting at a "top level" indent-defined Vim outline, this -# program finds all "tags" defined as headlines starting with -# _tag_, and containing a subheadline containing the file -# to which the tag should jump. This program creates a tags -# file. -#Steve Litt, 5/28/2001 -#End of version 0.1.0 -# -# V0.1.1 Pre-alpha -# Bug fixes, including ../ resolution -# -#Steve Litt, 5/28/2001 -#End of version 0.1.1 -# -# -# V0.1.2 Pre-alpha -# More bug fixes, and facility to create a new outline -# file from a tag whose corresponding file doesn't yet -# exist. -#Steve Litt, 5/30/2001 -#End of version 0.1.2 -# -# V0.1.3 Pre-alpha -# More bug fixes. This was the first version released -# file from a tag whose corresponding file doesn't yet -# exist. -#Steve Litt, 6/01/2001 -#End of version 0.1.3 -# -# V0.2.0 Pre-alpha -#Steve Litt, 12/03/2002 -# This file unchanged. The overall Vimoutliner version -# 0.2.0 has extensive improvements, including intuitive -# collapse/expand. -#End of version 0.2.0 -#END OF HISTORY -# -# -# V0.1.2 Pre-alpha -# More bug fixes, and facility to create a new outline -# file from a tag whose corresponding file doesn't yet -# exist. -#Steve Litt, 5/30/2001 -#End of version 0.1.2 -# V0.3.5 release 20110303 -# Changed vo_tags.tag directory from -# $HOME/.vimoutliner/ -# to -# $HOME/.vim/vimoutliner/ -#Steve Litt, 3/3/2011 -#End of version 0.3.5 release 20110303 -#END OF HISTORY -# -# ####################################################################### - - -use strict; -use vars qw($TAGFILENAME); -use Cwd; - -$TAGFILENAME = $ENV{"HOME"} . "/.vim/vimoutliner/vo_tags.tag"; -##### OLD LOCATION BELOW, REMOVE IN 0.3.6, COMMENT FOR NOW -#$TAGFILENAME = $ENV{"HOME"} . "/.vimoutliner/vo_tags.tag"; - -sub process1Outline($$); #Early prototype the recursive routine -sub makeDirectory($); #Early prototype the recursive routine - -sub makeTagFileStartingAt($) - { - unless(@ARGV == 1) - { - usage(); - die; - } - my($absoluteFileName) = deriveAbsoluteFileName(Cwd::cwd(), $_[0]); - - my(%processedFiles) = (); - recordFileAsProcessed($absoluteFileName,\%processedFiles); - unlink $TAGFILENAME; - process1Outline($absoluteFileName, \%processedFiles); - sortAndDeleteDupsFromTagFile(); - } - -sub sortAndDeleteDupsFromTagFile() - { - my($TEMPTAGFILENAME) = "$ENV{'HOME'}/temptagfile.tag"; - system("sort $TAGFILENAME | uniq > $TEMPTAGFILENAME"); - system("rm $TAGFILENAME"); - system("mv $TEMPTAGFILENAME $TAGFILENAME"); - } - - -sub process1Outline($$) - { - my($fileName) = $_[0]; - my($processedFilesHashRef) = $_[1]; - - unless(fileExists($fileName)) - { - makeDirectory($fileName); - makeEmptyFile($fileName); - } - - print "Begin processing file $fileName.\n"; - - my($baseDirectory) = getBaseDirectory($fileName); - my(%tags) = getTagsFromFile($fileName); - my(@tagKeys) = keys(%tags); - my($tagKey); - foreach $tagKey (@tagKeys) - { - my($absoluteFileName); - if(isAbsoluteFilePath($tags{$tagKey})) - { - $absoluteFileName = $tags{$tagKey}; - } - else - { - $absoluteFileName = - deriveAbsoluteFileName($baseDirectory, $tags{$tagKey}); - } - appendTagToTagFile($tagKey,$absoluteFileName); - if(notProcessedYet($absoluteFileName, $processedFilesHashRef)) - { - recordFileAsProcessed($absoluteFileName,$processedFilesHashRef); - process1Outline($absoluteFileName, $processedFilesHashRef); - } - } - } - -sub appendTagToTagFile($$) - { - open(TAGFILE, ">>$TAGFILENAME"); - print TAGFILE "$_[0] $_[1] :1\n"; - close(TAGFILE); - } - - -sub makeEmptyFile($) - { - open(OUTLINEFILE, ">" . $_[0]); - close(OUTLINEFILE); - } - - -sub makeDirectory($) - { - my($completeFileName) = $_[0]; - my($directoryName) = ($completeFileName =~ m/^(.*?)[^\/]*$/); - unless($directoryName eq "") - { - my($temp) = ($directoryName =~ m/^(.*).$/); - makeDirectory($temp); - print "Creating $directoryName..."; - if(mkdir $directoryName) - { - print " succeeded.\n"; - } - else - { - print " no action: $!.\n"; - } - } - } - -sub fileExists($) - { - my($outlineFileName) = $_[0]; - my($success) = open(OUTLINEFILE, "<" . $outlineFileName); - if($success) - { - close(OUTLINEFILE); - return(1); - } - else - { - return(0); - } - } - -sub getTagsFromFile($) - { - my($outlineFileName) = $_[0]; - my(%tags); - my($tagString) = ""; - my($success) = open(OUTLINEFILE, "<" . $outlineFileName); - unless($success) - { - print "Failed to open $outlineFileName\n"; - return(()); - } - while() - { - my($line) = $_; - chomp($line); - if($line =~ m/^\s*(_tag_\S+)/) - { - $tagString = $1; - } - elsif($tagString ne "") - { - $line =~ m/^\s*(\S+)/; - my($filename) = $1; - $tags{$tagString} = - deriveAbsoluteFileName(getBaseDirectory($_[0]), $1); - $tagString = ""; - } - } - return(%tags); - } - -sub recordFileAsProcessed($$) - { - my($absoluteFileName) = $_[0]; - my($processedFilesHashRef) = $_[1]; - ${$processedFilesHashRef}{$absoluteFileName} = "1"; - } - -sub notProcessedYet($$) - { - my($absoluteFileName) = $_[0]; - my(%processedFiles) = %{$_[1]}; - if(defined($processedFiles{$absoluteFileName})) - { - return(0); - } - else - { - return(1); - } - } - -sub dia($) - { - print "dia " . $_[0] . "\n"; - } - - -sub isAbsoluteFilePath($) - { - if($_[0] =~ m/^\//) - { - return 1; - } - else - { - return 0; - } - } - -sub getFileNameOnly($) - { - my($fileString); - if ($_[0] =~ m/.+\/(.*)$/) - { - $fileString= $1 - } - else - { - $fileString = $_[0]; - } - - return $fileString; - } - -sub getBaseDirectory($) - { - my($dirString) = ($_[0] =~ m/(.+\/).*$/); - return $dirString; - } - -sub deriveAbsoluteFileName($$) - { - my($absoluteFileName); - my($baseDirectory) = $_[0]; - my($passedFileName) = $_[1]; - unless($baseDirectory =~ m/\/$/) - { - $baseDirectory= $baseDirectory . "/"; - } - if($passedFileName =~ m/^\//) - { - $absoluteFileName = $passedFileName; - } - else - { - $absoluteFileName = $baseDirectory . $passedFileName; - } - - $absoluteFileName =~ s/\/\.\//\//g; #remove all "./"; - deleteDoubleDots($absoluteFileName); - - return($absoluteFileName); - } - -sub deleteDoubleDots($) - { - while($_[0] =~ m/\.\./) - { - $_[0] =~ s/\/[^\/]*\/\.\.//; - } - } - -sub usage() - { - print "\nUsage is:\n"; - print "otltags topLevelOutlineFileName\n\n"; - } - - -makeTagFileStartingAt($ARGV[0]) - diff --git a/pack/acp/start/vimoutliner/vimoutlinerrc b/pack/acp/start/vimoutliner/vimoutlinerrc deleted file mode 100644 index 12aaed0..0000000 --- a/pack/acp/start/vimoutliner/vimoutlinerrc +++ /dev/null @@ -1,67 +0,0 @@ -"Extra configurations and mappings ****************************************** -"This mapping is fold-level and fold-state dependent -"map dd p -"map dd P - -"Common Plugins -" The vo_modules_load variable holds name of all VO modules you want to load. -" If you do not want to load any VO modules leave it blank - -" This setting loads the checkboxes, tags and smart_paste plugins as default. -let g:vo_modules_load = "checkbox:tags:smart_paste" - -" Uncomment the following line to enable the math plugin. -"let g:vo_modules_load .= ':math' - -" Uncomment the following line to enable new hoisting. -" let g:vo_modules_load .= ':newhoist' - -" Uncomment the following line to enable the format plugin. -"let g:vo_modules_load .= ':format' - -" Uncomment the following line to enable clocking. -"let g:vo_modules_load .= ':clock' - -"User Preferences *************************************************** -"let maplocalleader = ',,' " uncomment for compatibility with - " previous versions of VO - -"setlocal ignorecase " searches ignore case -"setlocal smartcase " searches use smart case -"setlocal wrapmargin=5 -"setlocal tw=78 -"setlocal tabstop=4 " tabstop and shiftwidth must match -"setlocal shiftwidth=4 " values from 2 to 8 work well -"setlocal background=dark " for dark backgrounds -"setlocal nowrap - -" colorscheme votl_light " set a VO specific colorscheme - -"Checkbox Tags -" Tags can contain any word characters (:help word) -" tags must not contain whitespace -" tags must be unique -" there can be no intersections between lists -" 'high', 'High', and 'HIGH' are considered to be unique and nonintersecting -" each sub-list represents a unique circular 'ring' of tags -" currently, these options do not affect checkboxes -" status indicators like DONE, NOT DONE and CANCELED are -" refelected in the checkbox state: [X], [_] and [-], respectively -" each tag is a [] block, just like a checkbox; chosen for possible future integration -" each tag must be delimited by whitespace -" [TODO] [Feature] <-- this -" [TODO][Feature] <-- not this - -let g:cbTags = [ -\ ['TODO','FEEDBACK','VERIFY','DELEGATED','HOLDING'] -\,['Feature','Enhancement','Bug'] -\,['Low','Normal','High','URGENT'] -\,['@Home','@Lab','@Work','@Shopping'] -\] - - -"Hoisting *********************************************************** -"Uncomment and set to 1 to debug hoisting -"let g:hoistParanoia=0 - -" vim: filetype=vim diff --git a/plugins.md b/plugins.md index 42944f4..003ebcb 100644 --- a/plugins.md +++ b/plugins.md @@ -8,11 +8,10 @@ Git submodules are slow, so handle this manually. ## pack/acp/start/ -* [ale](https://github.com/dense-analysis/ale) * [goyo.vim](https://github.com/junegunn/goyo.vim) -* [gruvbox](https://github.com/morhetz/gruvbox) * [limelight.vim](https://github.com/junegunn/limelight.vim) * [mom.vim](https://github.com/vim-scripts/mom.vim) +* [papercolor-theme](https://github.com/NLKNguyen/papercolor-theme) * [vim-go](https://github.com/fatih/vim-go) * [vim-ps1](https://github.com/PProvost/vim-ps1) * [vim-speeddating](https://github.com/tpope/vim-speeddating)