From 4b267a1db00894e50c941f4e390ccf30b5b697c6 Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Sun, 24 Jan 2021 10:03:48 -0500 Subject: [PATCH] unvendor flycheck --- emacs.d/custom.el | 2 +- emacs.d/vendor/flycheck/.flake8 | 6 - emacs.d/vendor/flycheck/.github/CLA.md | 7 - .../vendor/flycheck/.github/CONTRIBUTING.rst | 14 - .../.github/ISSUE_TEMPLATE/bug_report.md | 47 - .../.github/ISSUE_TEMPLATE/feature_request.md | 22 - .../.github/ISSUE_TEMPLATE/user-support.md | 50 - .../PULL_REQUEST_TEMPLATE/new-checker.md | 28 - emacs.d/vendor/flycheck/.gitignore | 14 - emacs.d/vendor/flycheck/.mailmap | 32 - emacs.d/vendor/flycheck/.travis.yml | 96 - .../vendor/flycheck/.travis/tools-and-emacs | 22 - emacs.d/vendor/flycheck/CHANGES.old | 1050 -- emacs.d/vendor/flycheck/CHANGES.rst | 412 - emacs.d/vendor/flycheck/COPYING | 674 - emacs.d/vendor/flycheck/Cask | 59 - emacs.d/vendor/flycheck/Cask.24 | 59 - emacs.d/vendor/flycheck/Cask.25 | 58 - emacs.d/vendor/flycheck/MAINTAINERS | 2 - emacs.d/vendor/flycheck/Makefile | 164 - emacs.d/vendor/flycheck/README.md | 52 - emacs.d/vendor/flycheck/doc/.gitignore | 5 - emacs.d/vendor/flycheck/doc/COPYING.cc-by-sa | 428 - emacs.d/vendor/flycheck/doc/Makefile | 112 - .../vendor/flycheck/doc/_static/favicon.ico | Bin 5694 -> 0 bytes .../vendor/flycheck/doc/_static/favicon.png | Bin 1546 -> 0 bytes emacs.d/vendor/flycheck/doc/_static/logo.png | Bin 4706 -> 0 bytes .../vendor/flycheck/doc/_templates/about.html | 43 - .../flycheck/doc/_templates/layout.html | 20 - .../flycheck/doc/_templates/tables.html | 6 - emacs.d/vendor/flycheck/doc/changes.rst | 5 - .../vendor/flycheck/doc/community/conduct.rst | 96 - .../flycheck/doc/community/extensions.rst | 166 - .../flycheck/doc/community/get-help.rst | 17 - .../vendor/flycheck/doc/community/people.rst | 293 - emacs.d/vendor/flycheck/doc/conf.py | 302 - .../flycheck/doc/contributor/contributing.rst | 274 - .../flycheck/doc/contributor/maintaining.rst | 306 - .../flycheck/doc/contributor/style-guide.rst | 193 - .../flycheck/doc/developer/developing.rst | 399 - emacs.d/vendor/flycheck/doc/elisp.py | 433 - emacs.d/vendor/flycheck/doc/glossary.rst | 53 - .../doc/images/flycheck-annotated.png | Bin 225674 -> 0 bytes .../doc/images/flycheck-error-list.png | Bin 49690 -> 0 bytes .../doc/images/flycheck-error-reports.png | Bin 37396 -> 0 bytes .../flycheck/doc/images/flycheck-menu.png | Bin 139811 -> 0 bytes .../doc/images/flycheck-mode-line-menu.png | Bin 45166 -> 0 bytes .../doc/images/flycheck-verify-buffer.png | Bin 214170 -> 0 bytes emacs.d/vendor/flycheck/doc/index.rst | 173 - emacs.d/vendor/flycheck/doc/info.py | 192 - emacs.d/vendor/flycheck/doc/languages.rst | 1611 -- emacs.d/vendor/flycheck/doc/licenses.rst | 17 - emacs.d/vendor/flycheck/doc/requirements.txt | 10 - .../flycheck/doc/user/error-interaction.rst | 199 - .../vendor/flycheck/doc/user/error-list.rst | 98 - .../flycheck/doc/user/error-reports.rst | 317 - .../doc/user/flycheck-versus-flymake.rst | 290 - .../vendor/flycheck/doc/user/installation.rst | 146 - .../vendor/flycheck/doc/user/quickstart.rst | 80 - .../flycheck/doc/user/syntax-checkers.rst | 330 - .../flycheck/doc/user/syntax-checks.rst | 145 - .../flycheck/doc/user/troubleshooting.rst | 129 - emacs.d/vendor/flycheck/flycheck-buttercup.el | 157 - emacs.d/vendor/flycheck/flycheck-ert.el | 507 - emacs.d/vendor/flycheck/flycheck.el | 12402 ---------------- emacs.d/vendor/flycheck/flycheck.svg | 77 - emacs.d/vendor/flycheck/maint/Makefile | 59 - .../flycheck/maint/flycheck-checkdoc.el | 88 - .../vendor/flycheck/maint/flycheck-compile.el | 76 - .../vendor/flycheck/maint/flycheck-format.el | 151 - .../vendor/flycheck/maint/flycheck-maint.el | 57 - emacs.d/vendor/flycheck/maint/release.py | 201 - .../vendor/flycheck/maint/requirements.txt | 14 - emacs.d/vendor/flycheck/test/.gitignore | 1 - emacs.d/vendor/flycheck/test/.nosearch | 0 emacs.d/vendor/flycheck/test/flycheck-test.el | 5208 ------- emacs.d/vendor/flycheck/test/init.el | 152 - .../test/resources/automatic-check-dummy.el | 1 - .../flycheck/test/resources/bin/dummy-emacs | 13 - .../dummy-package-autoloads.el | 29 - .../dummy-package-0.1/dummy-package-pkg.el | 1 - .../dummy-package-0.1/dummy-package.el | 5 - .../test/resources/global-mode-dummy.el | 1 - .../test/resources/language/ada/hello.adb | 11 - .../resources/language/ada/syntaxerror.adb | 8 - .../test/resources/language/asciidoc.adoc | 15 - .../test/resources/language/asciidoctor.adoc | 6 - .../resources/language/awk/syntax-error.awk | 2 - .../language/bazel/syntax-error.bazel | 3 - .../resources/language/bazel/warnings.bazel | 4 - .../test/resources/language/c_c++/error.cpp | 8 - .../language/c_c++/in-included-file.cpp | 3 - .../language/c_c++/include/library.h | 1 - .../test/resources/language/c_c++/includes.c | 2 - .../test/resources/language/c_c++/local.h | 1 - .../test/resources/language/c_c++/style.cpp | 14 - .../test/resources/language/c_c++/style2.cpp | 7 - .../test/resources/language/c_c++/warning.c | 9 - .../test/resources/language/cfengine/error.cf | 10 - .../resources/language/cfengine/warning.cf | 9 - .../resources/language/chef/recipes/error.rb | 14 - .../language/chicken/error-no-line-number.scm | 1 - .../chicken/syntax-error-no-line-number.scm | 1 - .../language/chicken/syntax-error.scm | 1 - .../language/chicken/syntax-read-error.scm | 1 - .../resources/language/coffee/error.coffee | 4 - .../test/resources/language/coffee/lint.json | 58 - .../language/coffee/syntax-error.coffee | 5 - .../test/resources/language/coq/error.v | 10 - .../resources/language/coq/syntax-error.v | 10 - .../resources/language/css/syntax-error.css | 5 - .../test/resources/language/css/warning.css | 5 - .../resources/language/cuda/syntax-error.cu | 3 - .../resources/language/cuda/syntax-warning.cu | 6 - .../test/resources/language/cwl/cwl.cwl | 8 - .../language/cwl/schema/CommandLineTool.yml | 895 -- .../cwl/schema/CommonWorkflowLanguage.yml | 11 - .../resources/language/cwl/schema/Process.yml | 743 - .../language/cwl/schema/Workflow.yml | 583 - .../resources/language/cwl/schema/concepts.md | 1 - .../resources/language/cwl/schema/contrib.md | 1 - .../resources/language/cwl/schema/intro.md | 1 - .../language/cwl/schema/invocation.md | 1 - .../language/cwl/schema/metaschema_base.yml | 164 - .../language/d/lib/external_library.d | 1 - .../language/d/src/dmd/continuation.d | 13 - .../resources/language/d/src/dmd/library.d | 3 - .../resources/language/d/src/dmd/no_module.d | 1 - .../resources/language/d/src/dmd/package.d | 3 - .../resources/language/d/src/dmd/warning.d | 21 - .../language/dockerfile/Dockerfile.error | 2 - .../language/dockerfile/Dockerfile.warning | 3 - .../resources/language/elixir/lib/infos.ex | 5 - .../resources/language/elixir/lib/warnings.ex | 11 - .../test/resources/language/elixir/mix.exs | 13 - .../emacs-lisp/check-declare-warnings.el | 12 - .../checkdoc-elisp-mode-regression.el | 18 - .../emacs-lisp/errors-and-warnings.el | 22 - .../emacs-lisp/local-checkdoc-variables.el | 25 - .../language/emacs-lisp/syntax-error.el | 3 - .../resources/language/emacs-lisp/warnings.el | 20 - .../language/emacs-lisp/warnings.el.gz | Bin 314 -> 0 bytes .../ember-template-lint/.template-lintrc.js | 10 - .../ember-template-lint/error.hbs | 3 - .../ember-template-lint/warning.hbs | 1 - .../language/erlang/erlang/error.erl | 8 - .../language/erlang/erlang/warning.erl | 6 - .../language/erlang/rebar3/.gitignore | 2 - .../rebar3/_checkouts/dependency/.gitignore | 4 - .../rebar3/_checkouts/dependency/rebar.config | 5 - .../dependency/src/dependency.app.src | 15 - .../_checkouts/dependency/src/dependency.erl | 4 - .../language/erlang/rebar3/rebar.config | 5 - .../erlang/rebar3/src/erlang-error.erl | 8 - .../erlang/rebar3/src/erlang-rebar3.app.src | 15 - .../erlang/rebar3/src/erlang-rebar3.erl | 13 - .../test/resources/language/eruby.erb | 7 - .../test/resources/language/fortran/error.f | 3 - .../resources/language/fortran/warning.f90 | 20 - .../test/resources/language/go/src/b1/main.go | 10 - .../test/resources/language/go/src/b2/b2.go | 5 - .../language/go/src/errcheck/errcheck.go | 10 - .../language/go/src/megacheck/megacheck1.go | 16 - .../language/go/src/megacheck/megacheck2.go | 3 - .../go/src/staticcheck/staticcheck1.go | 16 - .../go/src/staticcheck/staticcheck2.go | 3 - .../language/go/src/syntax/syntax-error.go | 6 - .../language/go/src/test/test-error_test.go | 9 - .../language/go/src/unconvert/unconvert.go | 8 - .../resources/language/go/src/warnings.go | 28 - .../test/resources/language/groovy.groovy | 3 - .../resources/language/haml/haml-error.haml | 5 - .../resources/language/haml/ruby-error.haml | 1 - .../test/resources/language/handlebars.hbs | 3 - .../resources/language/haskell/.gitignore | 1 - .../test/resources/language/haskell/Error.hs | 4 - .../resources/language/haskell/Literate.lhs | 7 - .../resources/language/haskell/SyntaxError.hs | 3 - .../resources/language/haskell/Warnings.hs | 7 - .../src/Foo.hs | 5 - .../stack-nonstandard.yaml | 4 - ...tack-project-with-renamed-stack-yaml.cabal | 34 - .../stack.yaml | 4 - .../test/resources/language/html.html | 10 - .../language/javascript/.eslintrc.json | 6 - .../resources/language/javascript/eslint.json | 6 - .../resources/language/javascript/jshintrc | 3 - .../resources/language/javascript/style.js | 5 - .../language/javascript/syntax-error.js | 3 - .../resources/language/javascript/warnings.js | 5 - .../test/resources/language/json.json | 2 - .../language/jsonnet/runtime_error.jsonnet | 3 - .../language/jsonnet/static_error.jsonnet | 3 - .../resources/language/less/file-error.less | 6 - .../resources/language/less/syntax-error.less | 1 - .../flycheck/test/resources/language/llvm.ll | 6 - .../resources/language/lua/custom.luacheckrc | 1 - .../language/lua/ngx_lua.warnings.lua | 8 - .../resources/language/lua/syntax-error.lua | 7 - .../test/resources/language/lua/warnings.lua | 6 - .../test/resources/language/markdown.md | 4 - .../resources/language/nix/syntax-error.nix | 4 - .../test/resources/language/nix/warnings.nix | 5 - .../test/resources/language/opam.opam | 2 - .../flycheck/test/resources/language/perl.pl | 11 - .../resources/language/perl/DependencyA.pm | 9 - .../resources/language/perl/DependencyB.pm | 9 - .../test/resources/language/perl/Script.pl | 6 - .../resources/language/php/syntax-error.php | 10 - .../test/resources/language/php/warnings.php | 30 - .../processing/syntax_error/syntax_error.pde | 8 - .../protobuf/protobuf/syntax-error.proto | 3 - .../protobuf/prototool/missing_syntax.proto | 5 - .../protobuf/prototool/prototool.yaml | 0 .../test/resources/language/pug/foo-base.pug | 4 - .../language/pug/foo-unknown-filter.pug | 1 - .../test/resources/language/pug/foo.pug | 9 - .../resources/language/pug/pug-extends.pug | 3 - .../language/pug/pug-runtime-error.pug | 5 - .../test/resources/language/pug/pug.pug | 6 - .../resources/language/puppet/parser-error.pp | 4 - .../language/puppet/puppet3-parser-error.pp | 5 - .../puppet/puppet3-parser-multiline-error.pp | 5 - .../resources/language/puppet/warnings.pp | 11 - .../resources/language/python/__init__.py | 4 - .../test/resources/language/python/gh_1383.py | 6 - .../resources/language/python/invalid_type.py | 2 - .../resources/language/python/syntax-error.py | 3 - .../test/resources/language/python/test.py | 22 - .../flycheck/test/resources/language/r.R | 7 - .../test/resources/language/racket.rkt | 5 - .../flycheck/test/resources/language/rpm.spec | 22 - .../test/resources/language/rst/errors.rst | 26 - .../resources/language/rst/sphinx/conf.py | 12 - .../resources/language/rst/sphinx/index.rst | 9 - .../resources/language/ruby/syntax-error.rb | 5 - .../test/resources/language/ruby/warnings.rb | 16 - .../test/resources/language/rust/.gitignore | 2 - .../language/rust/cargo-targets/Cargo.lock | 6 - .../language/rust/cargo-targets/Cargo.toml | 3 - .../language/rust/cargo-targets/benches/a.rs | 4 - .../language/rust/cargo-targets/examples/a.rs | 4 - .../language/rust/cargo-targets/src/a.rs | 4 - .../language/rust/cargo-targets/src/bin/a.rs | 4 - .../language/rust/cargo-targets/src/lib.rs | 6 - .../language/rust/cargo-targets/src/main.rs | 4 - .../language/rust/cargo-targets/tests/a.rs | 4 - .../language/rust/dev-deps/Cargo.lock | 16 - .../language/rust/dev-deps/Cargo.toml | 8 - .../language/rust/dev-deps/src/lib.rs | 10 - .../language/rust/flycheck-test/Cargo.lock | 6 - .../language/rust/flycheck-test/Cargo.toml | 3 - .../rust/flycheck-test/src/imported.rs | 1 - .../rust/flycheck-test/src/importing.rs | 5 - .../rust/flycheck-test/src/macro-error.rs | 3 - .../language/rust/flycheck-test/src/main.rs | 9 - .../rust/flycheck-test/src/multiline-error.rs | 8 - .../rust/flycheck-test/src/note-and-help.rs | 13 - .../rust/flycheck-test/src/syntax-error.rs | 5 - .../rust/flycheck-test/src/warnings.rs | 5 - .../language/rust/lib-main/Cargo.lock | 6 - .../language/rust/lib-main/Cargo.toml | 3 - .../language/rust/lib-main/src/lib.rs | 3 - .../language/rust/lib-main/src/main.rs | 1 - .../language/rust/workspace/Cargo.lock | 6 - .../language/rust/workspace/Cargo.toml | 2 - .../language/rust/workspace/crate1/Cargo.toml | 3 - .../language/rust/workspace/crate1/src/lib.rs | 3 - .../test/resources/language/sass/error.sass | 5 - .../test/resources/language/sass/warning.sass | 3 - .../resources/language/scala/scalastyle.xml | 10 - .../language/scala/style-error.scala | 7 - .../language/scala/style-warning.scala | 6 - .../language/scala/syntax-error.scala | 5 - .../test/resources/language/scss/error.scss | 5 - .../resources/language/scss/lint-error.scss | 5 - .../resources/language/scss/scss-lint.yml | 8 - .../test/resources/language/scss/warning.scss | 4 - .../language/sh/bash-syntax-error.bash | 5 - .../language/sh/posix-syntax-error.sh | 3 - .../test/resources/language/sh/shellcheck.sh | 4 - .../language/sh/zsh-syntax-error.zsh | 5 - .../test/resources/language/slim.slim | 7 - .../flycheck/test/resources/language/sql.sql | 1 - .../language/systemd-analyze-test.service | 8 - .../test/resources/language/tcl/test.tcl | 12 - .../terraform/terraform/syntax-error.tf | 3 - .../language/terraform/tflint/error.tf | 8 - .../flycheck/test/resources/language/tex.tex | 10 - .../test/resources/language/texinfo.texi | 11 - .../test/resources/language/text/text.txt | 3 - .../resources/language/text/textlintrc.json | 5 - .../language/typescript/package.json | 5 - .../resources/language/typescript/sample.ts | 7 - .../resources/language/typescript/tslint.json | 7 - .../language/verilog/verilator_error.v | 7 - .../language/verilog/verilator_warning.v | 3 - .../flycheck/test/resources/language/vhdl.vhd | 3 - .../flycheck/test/resources/language/xml.xml | 5 - .../test/resources/language/yaml.yaml | 5 - .../flycheck/test/resources/narrowing.el | 17 - .../flycheck/test/resources/substitute-dummy | 1 - emacs.d/vendor/flycheck/test/run.el | 141 - .../test/specs/languages/test-c_c++.el | 106 - .../test/specs/languages/test-emacs-lisp.el | 59 - .../flycheck/test/specs/languages/test-go.el | 55 - .../test/specs/languages/test-haskell.el | 55 - .../test/specs/languages/test-help.el | 135 - .../test/specs/languages/test-javascript.el | 75 - .../flycheck/test/specs/languages/test-php.el | 77 - .../test/specs/languages/test-ruby.el | 70 - .../test/specs/languages/test-typescript.el | 95 - .../flycheck/test/specs/test-documentation.el | 107 - .../flycheck/test/specs/test-error-filters.el | 170 - .../flycheck/test/specs/test-error-list.el | 201 - .../flycheck/test/specs/test-error-parsers.el | 94 - .../test/specs/test-generic-checkers.el | 49 - .../flycheck/test/specs/test-global-mode.el | 128 - .../vendor/flycheck/test/specs/test-gpg.el | 135 - .../flycheck/test/specs/test-melpa-package.el | 95 - .../flycheck/test/specs/test-mode-line.el | 49 - .../vendor/flycheck/test/specs/test-util.el | 134 - 322 files changed, 1 insertion(+), 34874 deletions(-) delete mode 100644 emacs.d/vendor/flycheck/.flake8 delete mode 100644 emacs.d/vendor/flycheck/.github/CLA.md delete mode 100644 emacs.d/vendor/flycheck/.github/CONTRIBUTING.rst delete mode 100644 emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/user-support.md delete mode 100644 emacs.d/vendor/flycheck/.github/PULL_REQUEST_TEMPLATE/new-checker.md delete mode 100644 emacs.d/vendor/flycheck/.gitignore delete mode 100644 emacs.d/vendor/flycheck/.mailmap delete mode 100644 emacs.d/vendor/flycheck/.travis.yml delete mode 100644 emacs.d/vendor/flycheck/.travis/tools-and-emacs delete mode 100644 emacs.d/vendor/flycheck/CHANGES.old delete mode 100644 emacs.d/vendor/flycheck/CHANGES.rst delete mode 100644 emacs.d/vendor/flycheck/COPYING delete mode 100644 emacs.d/vendor/flycheck/Cask delete mode 100644 emacs.d/vendor/flycheck/Cask.24 delete mode 100644 emacs.d/vendor/flycheck/Cask.25 delete mode 100644 emacs.d/vendor/flycheck/MAINTAINERS delete mode 100644 emacs.d/vendor/flycheck/Makefile delete mode 100644 emacs.d/vendor/flycheck/README.md delete mode 100644 emacs.d/vendor/flycheck/doc/.gitignore delete mode 100644 emacs.d/vendor/flycheck/doc/COPYING.cc-by-sa delete mode 100644 emacs.d/vendor/flycheck/doc/Makefile delete mode 100644 emacs.d/vendor/flycheck/doc/_static/favicon.ico delete mode 100644 emacs.d/vendor/flycheck/doc/_static/favicon.png delete mode 100644 emacs.d/vendor/flycheck/doc/_static/logo.png delete mode 100644 emacs.d/vendor/flycheck/doc/_templates/about.html delete mode 100644 emacs.d/vendor/flycheck/doc/_templates/layout.html delete mode 100644 emacs.d/vendor/flycheck/doc/_templates/tables.html delete mode 100644 emacs.d/vendor/flycheck/doc/changes.rst delete mode 100644 emacs.d/vendor/flycheck/doc/community/conduct.rst delete mode 100644 emacs.d/vendor/flycheck/doc/community/extensions.rst delete mode 100644 emacs.d/vendor/flycheck/doc/community/get-help.rst delete mode 100644 emacs.d/vendor/flycheck/doc/community/people.rst delete mode 100644 emacs.d/vendor/flycheck/doc/conf.py delete mode 100644 emacs.d/vendor/flycheck/doc/contributor/contributing.rst delete mode 100644 emacs.d/vendor/flycheck/doc/contributor/maintaining.rst delete mode 100644 emacs.d/vendor/flycheck/doc/contributor/style-guide.rst delete mode 100644 emacs.d/vendor/flycheck/doc/developer/developing.rst delete mode 100644 emacs.d/vendor/flycheck/doc/elisp.py delete mode 100644 emacs.d/vendor/flycheck/doc/glossary.rst delete mode 100644 emacs.d/vendor/flycheck/doc/images/flycheck-annotated.png delete mode 100644 emacs.d/vendor/flycheck/doc/images/flycheck-error-list.png delete mode 100644 emacs.d/vendor/flycheck/doc/images/flycheck-error-reports.png delete mode 100644 emacs.d/vendor/flycheck/doc/images/flycheck-menu.png delete mode 100644 emacs.d/vendor/flycheck/doc/images/flycheck-mode-line-menu.png delete mode 100644 emacs.d/vendor/flycheck/doc/images/flycheck-verify-buffer.png delete mode 100644 emacs.d/vendor/flycheck/doc/index.rst delete mode 100644 emacs.d/vendor/flycheck/doc/info.py delete mode 100644 emacs.d/vendor/flycheck/doc/languages.rst delete mode 100644 emacs.d/vendor/flycheck/doc/licenses.rst delete mode 100644 emacs.d/vendor/flycheck/doc/requirements.txt delete mode 100644 emacs.d/vendor/flycheck/doc/user/error-interaction.rst delete mode 100644 emacs.d/vendor/flycheck/doc/user/error-list.rst delete mode 100644 emacs.d/vendor/flycheck/doc/user/error-reports.rst delete mode 100644 emacs.d/vendor/flycheck/doc/user/flycheck-versus-flymake.rst delete mode 100644 emacs.d/vendor/flycheck/doc/user/installation.rst delete mode 100644 emacs.d/vendor/flycheck/doc/user/quickstart.rst delete mode 100644 emacs.d/vendor/flycheck/doc/user/syntax-checkers.rst delete mode 100644 emacs.d/vendor/flycheck/doc/user/syntax-checks.rst delete mode 100644 emacs.d/vendor/flycheck/doc/user/troubleshooting.rst delete mode 100644 emacs.d/vendor/flycheck/flycheck-buttercup.el delete mode 100644 emacs.d/vendor/flycheck/flycheck-ert.el delete mode 100644 emacs.d/vendor/flycheck/flycheck.el delete mode 100644 emacs.d/vendor/flycheck/flycheck.svg delete mode 100644 emacs.d/vendor/flycheck/maint/Makefile delete mode 100644 emacs.d/vendor/flycheck/maint/flycheck-checkdoc.el delete mode 100644 emacs.d/vendor/flycheck/maint/flycheck-compile.el delete mode 100644 emacs.d/vendor/flycheck/maint/flycheck-format.el delete mode 100644 emacs.d/vendor/flycheck/maint/flycheck-maint.el delete mode 100755 emacs.d/vendor/flycheck/maint/release.py delete mode 100644 emacs.d/vendor/flycheck/maint/requirements.txt delete mode 100644 emacs.d/vendor/flycheck/test/.gitignore delete mode 100644 emacs.d/vendor/flycheck/test/.nosearch delete mode 100644 emacs.d/vendor/flycheck/test/flycheck-test.el delete mode 100644 emacs.d/vendor/flycheck/test/init.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/automatic-check-dummy.el delete mode 100755 emacs.d/vendor/flycheck/test/resources/bin/dummy-emacs delete mode 100644 emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package-autoloads.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package-pkg.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/global-mode-dummy.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/ada/hello.adb delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/ada/syntaxerror.adb delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/asciidoc.adoc delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/asciidoctor.adoc delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/awk/syntax-error.awk delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/bazel/syntax-error.bazel delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/bazel/warnings.bazel delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/c_c++/error.cpp delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/c_c++/in-included-file.cpp delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/c_c++/include/library.h delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/c_c++/includes.c delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/c_c++/local.h delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/c_c++/style.cpp delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/c_c++/style2.cpp delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/c_c++/warning.c delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cfengine/error.cf delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cfengine/warning.cf delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/chef/recipes/error.rb delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/chicken/error-no-line-number.scm delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-error-no-line-number.scm delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-error.scm delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-read-error.scm delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/coffee/error.coffee delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/coffee/lint.json delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/coffee/syntax-error.coffee delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/coq/error.v delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/coq/syntax-error.v delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/css/syntax-error.css delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/css/warning.css delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cuda/syntax-error.cu delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cuda/syntax-warning.cu delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cwl/cwl.cwl delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cwl/schema/CommandLineTool.yml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cwl/schema/CommonWorkflowLanguage.yml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cwl/schema/Process.yml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cwl/schema/Workflow.yml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cwl/schema/concepts.md delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cwl/schema/contrib.md delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cwl/schema/intro.md delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cwl/schema/invocation.md delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/cwl/schema/metaschema_base.yml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/d/lib/external_library.d delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/continuation.d delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/library.d delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/no_module.d delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/package.d delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/warning.d delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/dockerfile/Dockerfile.error delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/dockerfile/Dockerfile.warning delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/elixir/lib/infos.ex delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/elixir/lib/warnings.ex delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/elixir/mix.exs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/check-declare-warnings.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/checkdoc-elisp-mode-regression.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/errors-and-warnings.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/local-checkdoc-variables.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/syntax-error.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/warnings.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/warnings.el.gz delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/ember-template-lint/ember-template-lint/.template-lintrc.js delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/ember-template-lint/ember-template-lint/error.hbs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/ember-template-lint/ember-template-lint/warning.hbs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/erlang/error.erl delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/erlang/warning.erl delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/.gitignore delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/.gitignore delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/rebar.config delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/src/dependency.app.src delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/src/dependency.erl delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/rebar.config delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-error.erl delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-rebar3.app.src delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-rebar3.erl delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/eruby.erb delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/fortran/error.f delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/fortran/warning.f90 delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/b1/main.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/b2/b2.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/errcheck/errcheck.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/megacheck/megacheck1.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/megacheck/megacheck2.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/staticcheck/staticcheck1.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/staticcheck/staticcheck2.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/syntax/syntax-error.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/test/test-error_test.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/unconvert/unconvert.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/go/src/warnings.go delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/groovy.groovy delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haml/haml-error.haml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haml/ruby-error.haml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/handlebars.hbs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haskell/.gitignore delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haskell/Error.hs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haskell/Literate.lhs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haskell/SyntaxError.hs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haskell/Warnings.hs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/src/Foo.hs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack-nonstandard.yaml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack-project-with-renamed-stack-yaml.cabal delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack.yaml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/html.html delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/javascript/.eslintrc.json delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/javascript/eslint.json delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/javascript/jshintrc delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/javascript/style.js delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/javascript/syntax-error.js delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/javascript/warnings.js delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/json.json delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/jsonnet/runtime_error.jsonnet delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/jsonnet/static_error.jsonnet delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/less/file-error.less delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/less/syntax-error.less delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/llvm.ll delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/lua/custom.luacheckrc delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/lua/ngx_lua.warnings.lua delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/lua/syntax-error.lua delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/lua/warnings.lua delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/markdown.md delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/nix/syntax-error.nix delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/nix/warnings.nix delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/opam.opam delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/perl.pl delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/perl/DependencyA.pm delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/perl/DependencyB.pm delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/perl/Script.pl delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/php/syntax-error.php delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/php/warnings.php delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/processing/syntax_error/syntax_error.pde delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/protobuf/protobuf/syntax-error.proto delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/protobuf/prototool/missing_syntax.proto delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/protobuf/prototool/prototool.yaml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/pug/foo-base.pug delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/pug/foo-unknown-filter.pug delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/pug/foo.pug delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/pug/pug-extends.pug delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/pug/pug-runtime-error.pug delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/pug/pug.pug delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/puppet/parser-error.pp delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/puppet/puppet3-parser-error.pp delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/puppet/puppet3-parser-multiline-error.pp delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/puppet/warnings.pp delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/python/__init__.py delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/python/gh_1383.py delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/python/invalid_type.py delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/python/syntax-error.py delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/python/test.py delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/r.R delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/racket.rkt delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rpm.spec delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rst/errors.rst delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rst/sphinx/conf.py delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rst/sphinx/index.rst delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/ruby/syntax-error.rb delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/ruby/warnings.rb delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/.gitignore delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/Cargo.lock delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/Cargo.toml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/benches/a.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/examples/a.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/a.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/bin/a.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/lib.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/main.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/tests/a.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/Cargo.lock delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/Cargo.toml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/src/lib.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/Cargo.lock delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/Cargo.toml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/imported.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/importing.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/macro-error.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/main.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/multiline-error.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/note-and-help.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/syntax-error.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/warnings.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/Cargo.lock delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/Cargo.toml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/src/lib.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/src/main.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/workspace/Cargo.lock delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/workspace/Cargo.toml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/workspace/crate1/Cargo.toml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/rust/workspace/crate1/src/lib.rs delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/sass/error.sass delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/sass/warning.sass delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/scala/scalastyle.xml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/scala/style-error.scala delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/scala/style-warning.scala delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/scala/syntax-error.scala delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/scss/error.scss delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/scss/lint-error.scss delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/scss/scss-lint.yml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/scss/warning.scss delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/sh/bash-syntax-error.bash delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/sh/posix-syntax-error.sh delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/sh/shellcheck.sh delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/sh/zsh-syntax-error.zsh delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/slim.slim delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/sql.sql delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/systemd-analyze-test.service delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/tcl/test.tcl delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/terraform/terraform/syntax-error.tf delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/terraform/tflint/error.tf delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/tex.tex delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/texinfo.texi delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/text/text.txt delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/text/textlintrc.json delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/typescript/package.json delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/typescript/sample.ts delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/typescript/tslint.json delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/verilog/verilator_error.v delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/verilog/verilator_warning.v delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/vhdl.vhd delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/xml.xml delete mode 100644 emacs.d/vendor/flycheck/test/resources/language/yaml.yaml delete mode 100644 emacs.d/vendor/flycheck/test/resources/narrowing.el delete mode 100644 emacs.d/vendor/flycheck/test/resources/substitute-dummy delete mode 100644 emacs.d/vendor/flycheck/test/run.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/languages/test-c_c++.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/languages/test-emacs-lisp.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/languages/test-go.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/languages/test-haskell.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/languages/test-help.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/languages/test-javascript.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/languages/test-php.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/languages/test-ruby.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/languages/test-typescript.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/test-documentation.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/test-error-filters.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/test-error-list.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/test-error-parsers.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/test-generic-checkers.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/test-global-mode.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/test-gpg.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/test-melpa-package.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/test-mode-line.el delete mode 100644 emacs.d/vendor/flycheck/test/specs/test-util.el diff --git a/emacs.d/custom.el b/emacs.d/custom.el index 722f6b8..e2a4b07 100644 --- a/emacs.d/custom.el +++ b/emacs.d/custom.el @@ -4,7 +4,7 @@ ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(package-selected-packages - '(lsp-python-ms helm-lsp go-mode company projectile helm adoc-mode csv-mode php-mode python-black cython-mode scss-mode vue-mode tide rust-mode company-auctex tex-site auctex sphinx-doc company-lsp lsp-ui lsp-mode ws-butler use-package smartparens pip-requirements osx-clipboard monokai-theme markdown-mode helm-projectile helm-ag godoctor go-guru go-eldoc go-autocomplete flycheck-gometalinter doom-modeline dockerfile-mode docker-compose-mode diminish company-go company-anaconda))) + '(flycheck lsp-python-ms helm-lsp go-mode company projectile helm adoc-mode csv-mode php-mode python-black cython-mode scss-mode vue-mode tide rust-mode company-auctex tex-site auctex sphinx-doc company-lsp lsp-ui lsp-mode ws-butler use-package smartparens pip-requirements osx-clipboard monokai-theme markdown-mode helm-projectile helm-ag godoctor go-guru go-eldoc go-autocomplete flycheck-gometalinter doom-modeline dockerfile-mode docker-compose-mode diminish company-go company-anaconda))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. diff --git a/emacs.d/vendor/flycheck/.flake8 b/emacs.d/vendor/flycheck/.flake8 deleted file mode 100644 index 7dc5e16..0000000 --- a/emacs.d/vendor/flycheck/.flake8 +++ /dev/null @@ -1,6 +0,0 @@ -# -*- mode: conf; -*- -[flake8] -# Ignore all missing docstrings for now, until we have docstrings everywhere -ignore = D100,D101,D102,D103,D105,D401,W503 -exclude = test/resources -inline-quotes = ' diff --git a/emacs.d/vendor/flycheck/.github/CLA.md b/emacs.d/vendor/flycheck/.github/CLA.md deleted file mode 100644 index 6b7f82e..0000000 --- a/emacs.d/vendor/flycheck/.github/CLA.md +++ /dev/null @@ -1,7 +0,0 @@ -I, the contributor, agree to licence my contributions to the Flycheck project -under the terms of the [GPL 3.0][1] and any later version, and to license my -contributions to the documentation of the Flycheck project under the terms of -the [Creative Commons Attribution-ShareAlike 4.0 International][2] license. - -[1]: http://www.flycheck.org/en/latest/licenses.html#flycheck-gpl -[2]: http://www.flycheck.org/en/latest/licenses.html#flycheck-cc-by-sa diff --git a/emacs.d/vendor/flycheck/.github/CONTRIBUTING.rst b/emacs.d/vendor/flycheck/.github/CONTRIBUTING.rst deleted file mode 100644 index a543317..0000000 --- a/emacs.d/vendor/flycheck/.github/CONTRIBUTING.rst +++ /dev/null @@ -1,14 +0,0 @@ -=========== - Thank you -=========== - -Thank you very much for your interest in contributing to Flycheck! We’d like to -warmly welcome you in the Flycheck community, and hope that you enjoy your time -with us! - -Flycheck’s documentation provides a comprehensive Contributor Guide which shows -how you can contribute to Flycheck and helps you through all stages of the -contribution process. - -Please read it at -. diff --git a/emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/bug_report.md b/emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index f861f9e..0000000 --- a/emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -name: Bug report -about: Report an unexpected Flycheck behavior -title: '' -labels: 'kind: bug' -assignees: '' - ---- - -Thank you for taking the time to report an issue and improve Flycheck. This template is for **actual bugs you observed**. If you have trouble setting up Flycheck, or if you have a question, please use the relevant issue template instead. - -## Checklist -- [ ] I have checked existing issues for potential duplicates before creating this one. -- [ ] I have read the [Troubleshooting guide][]. - -## Bug description -A clear and concise description of what the bug is. - -## Steps to reproduce -Steps to reproduce the behavior: -1. Open file '...' -2. Do '....' -3. See error - -- [ ] I have read https://emacs.stackexchange.com/questions/28429/how-do-i-troubleshoot-emacs-problems - -## Expected behavior -A clear and concise description of what you expected to happen. - -## Screenshots -If applicable, add screenshots to help explain your problem. - -## System configuration -``` -Paste the output of `M-x flycheck-verify-setup` here. -``` - -Emacs configuration: -- [ ] Plain Emacs / Custom configuration -- [ ] Spacemacs -- [ ] Doom Emacs -- [ ] Other shared configuration - -## Additional notes -Add any other context about the problem here. - -[Troubleshooting guide]: https://www.flycheck.org/en/latest/user/troubleshooting.html diff --git a/emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/feature_request.md b/emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index d1bd898..0000000 --- a/emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Feature request -about: Suggest an improvement to Flycheck -title: '' -labels: 'kind: feature request' -assignees: '' - ---- - -Thank you for taking the time to improve Flycheck. - -## Checklist -- [ ] I have checked existing issues for potential duplicates before creating this one. - -## Feature description -A clear and concise description of what you want Flycheck to do. - -## Describe alternatives you've considered -A clear and concise description of any alternative solutions or features you've considered. - -## Additional context -Add any other context or screenshots, mockups etc. diff --git a/emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/user-support.md b/emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/user-support.md deleted file mode 100644 index 7fc6e2c..0000000 --- a/emacs.d/vendor/flycheck/.github/ISSUE_TEMPLATE/user-support.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -name: User support -about: Trouble setting up or using Flycheck? -title: '' -labels: 'kind: user support' -assignees: '' - ---- - -This template is for **user support**. If you are reporting an actual Flycheck bug, please use the relevant issue template instead. - -## Checklist -- [ ] I have searched existing issues and StackOverflow for solutions. -- [ ] I have read the [Flycheck manual][]. -- [ ] I have read the [Troubleshooting Guide][]. -- [ ] I have checked my issue has not been reported yet. - -## Problem description -A clear and concise description of the problem you encounter. - -## Steps to reproduce -Steps to reproduce the behavior: -1. Open file '...' -2. Do '....' -3. See error - -- [ ] I have read https://emacs.stackexchange.com/questions/28429/how-do-i-troubleshoot-emacs-problems - -## Expected behavior -A clear and concise description of what you expected to happen. - -## Screenshots -If applicable, add screenshots to help explain your problem. - -## System configuration -``` -Paste the output of `M-x flycheck-verify-setup` here. -``` - -Emacs configuration: -- [ ] Plain Emacs / Custom configuration -- [ ] Spacemacs -- [ ] Doom Emacs -- [ ] Other shared configuration - -## Additional notes -Add any other context about the problem here. - -[Flycheck manual]: https://www.flycheck.org/en/latest/user/troubleshooting.html -[Troubleshooting guide]: https://www.flycheck.org/en/latest/user/troubleshooting.html diff --git a/emacs.d/vendor/flycheck/.github/PULL_REQUEST_TEMPLATE/new-checker.md b/emacs.d/vendor/flycheck/.github/PULL_REQUEST_TEMPLATE/new-checker.md deleted file mode 100644 index d93c6bf..0000000 --- a/emacs.d/vendor/flycheck/.github/PULL_REQUEST_TEMPLATE/new-checker.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -name: New checker -about: Provide a new checker implementation -title: 'Add syntax checker for XXX' -labels: 'component: checkers' -assignees: '' - ---- - -## Checklist -- [ ] I have read the [Contributor's guide][]. -- [ ] I have documented this checker in the [manual][]. -- [ ] I have added a test for this checker in [flycheck-test.el][]. -- [ ] (*If you have written a test*) I have created a companion PR to add the - checker tool in [flycheck/docker-tools][]. -- [ ] I have mentioned the checker in the [Changelog][]. - -## Description -Describe the checker you added. - -## Additional context -Additional relevant information about the checker and its integration into Flycheck. - -[Changelog]: https://github.com/flycheck/flycheck/blob/master/CHANGES.rst -[manual]: https://www.flycheck.org/en/latest/languages.html -[flycheck-test.el]: https://github.com/flycheck/flycheck/blob/master/test/flycheck-test.el -[flycheck/docker-tools]: https://github.com/flycheck/docker-tools -[Contributor's guide]: https://www.flycheck.org/en/latest/contributor/contributing.html diff --git a/emacs.d/vendor/flycheck/.gitignore b/emacs.d/vendor/flycheck/.gitignore deleted file mode 100644 index 562f42b..0000000 --- a/emacs.d/vendor/flycheck/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -*.elc - -# Packages installed for development -/.cask/ - -# Bundler configuration and lock file -/.bundle/ -/Gemfile.lock - -# Generated distribution packages -/dist/ - -# Directory local variables -.dir-locals.el diff --git a/emacs.d/vendor/flycheck/.mailmap b/emacs.d/vendor/flycheck/.mailmap deleted file mode 100644 index 320bbc9..0000000 --- a/emacs.d/vendor/flycheck/.mailmap +++ /dev/null @@ -1,32 +0,0 @@ -# -*- mode: conf; -*- - -Biao Xie <423300@gmail.com> -Bozhidar Batsov -Chao SHEN -Cristian Capdevila -Manuel Uberti -Manuel Uberti -Mark Hellewell -Mark Karpov -Peter Vasil -Romanos Skiadas -# Looks as if there's different unicode normalisations for this name -Saša Jovanić -Sean Whitton -Sebastian Schueppel -Sebastian Wiesner -Sebastian Wiesner -Senda Akiha -Steve Purcell -Sylvain Benner -Sylvain Rousseau -Vlatko Basic -Yuuki Arisawa -Zhuo Yuan - -# These contributors prefer to remain anonymous -fmdkdd - -# The real names of these contributors are unknown -papaeye -chessman diff --git a/emacs.d/vendor/flycheck/.travis.yml b/emacs.d/vendor/flycheck/.travis.yml deleted file mode 100644 index 5857295..0000000 --- a/emacs.d/vendor/flycheck/.travis.yml +++ /dev/null @@ -1,96 +0,0 @@ -# Use Python 3.5 for our tooling -language: python -python: -- "3.8" - -# Our tests are run with Emacs in Docker -services: -- docker - -matrix: - # Don’t wait for jobs that are allowed to fail - fast_finish: true - # Allow master branch to fail - allow_failures: - - env: JOB="emacs" EMACS_VERSION="master" - -cache: -- pip - -env: - matrix: - # Run our tests on all these Emacs versions - - JOB="emacs" EMACS_VERSION="master" - - JOB="emacs" EMACS_VERSION="27.1" - - JOB="emacs" EMACS_VERSION="26.3" - - JOB="emacs" EMACS_VERSION="25.3" - # A special job to build the manual - - JOB="build-manual" - # And another special job to lint our Python code - - JOB="lint-python" - -before_install: -- if [[ $JOB == emacs ]]; then docker pull flycheck/emacs-cask:$EMACS_VERSION; fi - -install: -- | - case $JOB in - emacs) - # We use separate Cask files for Emacs 25 - if [[ $EMACS_VERSION == 25.* ]]; then - cp Cask.25 Cask - fi - # Install Emacs modes for our tests - docker run --volume "$TRAVIS_BUILD_DIR":/flycheck \ - --workdir /flycheck \ - flycheck/emacs-cask:$EMACS_VERSION \ - /bin/bash -c "make init";; - build-manual) - # Install requirements of documentation - pip install -r doc/requirements.txt;; - lint-python) - # Install requirements for linting - pip install -r maint/requirements.txt;; - esac - -script: -- | - # Abort if any command fails - set -e - case $JOB in - emacs) - # Check formatting - docker run --volume "$TRAVIS_BUILD_DIR":/flycheck \ - --workdir /flycheck \ - flycheck/emacs-cask:$EMACS_VERSION \ - /bin/bash -c "make check" - # Compile and run unit tests. - docker run --volume "$TRAVIS_BUILD_DIR":/flycheck \ - --workdir /flycheck \ - flycheck/emacs-cask:$EMACS_VERSION \ - /bin/bash -c "make compile && make unit && make specs" - # If the unit tests succeed, fetch the all-tools container - # and run the integration tests - docker build --build-arg EMACS_VERSION=$EMACS_VERSION \ - --tag tools-and-emacs:$EMACS_VERSION \ - --file=.travis/tools-and-emacs . - docker run --volume "$TRAVIS_BUILD_DIR":/flycheck \ - --workdir /flycheck \ - tools-and-emacs:$EMACS_VERSION \ - /bin/bash -c "check-tools && make integ" ;; - - build-manual) - # Build and deploy the manual - make -C doc SPHINXOPTS=-n html;; - - lint-python) - # Lint our Python code - make -C maint check;; - - esac - -notifications: - webhooks: - urls: - - https://webhooks.gitter.im/e/efdc5fd9433efa7c6b80 - on_success: change diff --git a/emacs.d/vendor/flycheck/.travis/tools-and-emacs b/emacs.d/vendor/flycheck/.travis/tools-and-emacs deleted file mode 100644 index b825625..0000000 --- a/emacs.d/vendor/flycheck/.travis/tools-and-emacs +++ /dev/null @@ -1,22 +0,0 @@ -# Adding this stage is a workaround because `COPY --from` does not support -# variable substitution. -# See https://github.com/moby/moby/issues/34482 -ARG EMACS_VERSION=25.3 -FROM flycheck/emacs-cask:${EMACS_VERSION} AS emacs-cask - -FROM flycheck/all-tools - -# We need gnutls for downloading packages from ELPA -RUN apt-get -qq update && \ - apt-get install -qq --no-install-recommends -y \ - gnutls-bin \ - make \ - && rm -rf /var/lib/apt/lists/* - -# We need Emacs and Cask -ENV PATH /opt/emacs/bin:$PATH -COPY --from=emacs-cask /opt/emacs /opt/emacs - -ENV PATH /root/.cask/bin:$PATH -COPY --from=emacs-cask /root/.cask /root/.cask -COPY --from=emacs-cask /root/.emacs.d /root/.emacs.d diff --git a/emacs.d/vendor/flycheck/CHANGES.old b/emacs.d/vendor/flycheck/CHANGES.old deleted file mode 100644 index ca3b053..0000000 --- a/emacs.d/vendor/flycheck/CHANGES.old +++ /dev/null @@ -1,1050 +0,0 @@ -0.25.1 (Nov 16, 2015) ---------------------- - -- Fix undefined function call in ``emacs-lisp`` syntax checker [GH-791] - -0.25 (Nov 14, 2015) -------------------- - -- **Breaking changes**: - - - ``scala-scalastyle`` now expects a ``scalastyle`` executable in - ``exec-path`` [GH-763] - - Drop support for legacy Ruby YAML implementations prior to Ruby 1.9.3 in - ``ruby-yaml`` - - Remove racket syntax checker due to possible code execution [GH-786] - -- New syntax checkers: - - - JSON with Python’s built-in ``json`` module [GH-758] - - Rust with ``cargo rustc`` [GH-772] - -- New features: - - - Add ``flycheck-help-echo-function`` to customize the Help Echo of Flycheck - overlays [GH-730] - - Use symbolic error IDs in Pylint [GH-714] - - Add ``flycheck-pylint-use-symbolic-id`` to disable symbolic IDs for Pylint - [GH-714] - - Add ``flycheck-command-wrapper-function`` to wrap syntax checker commands - before execution [GH-629] [GH-752] - - Add ``flycheck-executable-find`` to customise how Flycheck searches - executables [GH-752] - - Add ``flycheck-hlint-args`` to pass additional arguments to hlint - [GH-713][GH-762] - - Add ``flycheck-go-build-tags`` and ``flycheck-go-install-deps`` to specify - tags and automatically install dependencies with ``go build`` [GH-674] - - Add :standard-input property to syntax checkers to read source from standard - input [GH-673] [GH-728] - - Add support for JSX modes to some Javascript checkers [GH-778] - -- Improvements: - - - Improve mode line display for buffers with only info messages [GH-733] - - Merge messages of all errors under cursor for Help Echo [GH-730] - - Align multi-line messages in error list [GH-732] [GH-731] - - Cache GHC output for faster syntax checking and better template haskell - support [GH-708] - - Fall back to ``rst`` if ``rst-sphinx`` is disabled [GH-745] [GH-746] - - New uniform fringe indicators [GH-750] - - Demote AsciiDoc deprecation warnings to ``info`` level - -- Bug fixes: - - - Fix error patterns of ``coq`` [GH-742] - - Support GFortran 5 [GH-751] - - Fix stack overflow when parsing hlint errors [GH-760] - - Fix error columns of jsonlint - -0.24 (Aug 15, 2015) -------------------- - -- **Breaking changes**: - - - Remove Elixir syntax checker due to code execution [GH-630] - - Drop support for Emacs 24.1 and 24.2 - -- New syntax checkers: - - - Javascript with ``jscs`` [GH-634] and ``standard`` [GH-644] - - Jade [GH-686] - - SQL with ``sqllint`` [GH-691] - - Groovy [GH-716] - - Haskell with ``stack ghc`` [GH-711] - -- New features: - - - The error list can now be filtered by error level by pressing f - - Add ``flycheck-error-list-minimum-level`` to restrict error levels displayed - in the error list [GH-698] [GH-701] - - Add ``flycheck-perl-include-path`` to set include directories for Perl - [GH-621] - - Add ``flycheck-rust-args`` to pass additional arguments to ``rustc`` - - Add ``flycheck-dmd-args`` to pass additional arguments to ``dmd`` [GH-655] - - Add ``flycheck-erlang-include-path`` [GH-668] and - ``flycheck-erlang-library-path`` [GH-696] for Erlang - - Add ``flycheck-verilator-include-path`` to set include directories for - Verilator [GH-684] - - Add ``flycheck-cppcheck-include-path`` to set include directories for - cppcheck [GH-687] - - Add support for Hlint configuration file [GH-682] - - Add Hlint options for ignore rules, language extensions and hint packages - [GH-682] - -- Improvements: - - - Show chained checkers in Help buffers for syntax checkers [GH-571] - - Map custom error levels to compilation mode levels [GH-700] - - ``flycheck-verify-setup`` now includes the manually selected checker if any - [GH-705] - - ``flycheck-select-checker`` now shows a verification buffer if the selected - checker cannot be used [GH-705] - - Add ``flycheck-verify-checker`` to check whether a specific syntax checker - can be used in a buffer [GH-705] - -- Bug fixes: - - - Fix offset of column numbers in ESLint [GH-640] - - Properly parse indentation errors from Python 2.7 [GH-635] - - Don’t choke if ``default-directory`` does not exist [GH-625] - - Fix error parsing for Puppet 4 - - Fix duplicate checkdoc errors on Emacs 25 - - Fix level of ``info`` messages in ``flycheck-compile`` [GH-669] - - Allow custom ``:verify`` functions for command checkers [GH-672] - - Fix error when ``flycheck-scalastylerc`` was set to a non-existing file - - Fix error column offsets in ``scala-scalastyle`` - - Do not use ``r-lintr`` in non-R buffers [GH-607] - - Enforce output format of ``flake8`` [GH-704] - - Parse error ids from luacheck 0.11 - - Fix patterns for Puppet environment names [GH-694] - - Properly locate configuration files from jshint and jscs [GH-703] - - Fix column offsets in eslint 1.0 [GH-718] - -0.23 (Apr 6, 2015) ------------------- - -- **Breaking changes**: - - - New manual in native Texinfo format, to achieve higher quality Info manuals - - Remove ``make`` syntax checker due to various issues [GH-572] [GH-573] - - Remove ``zsh`` support from ``sh-shellcheck``, since Shellcheck does not - support Zsh anymore - - Remove ``global-flycheck-mode`` from customization interface [GH-595] - -- New syntax checkers: - - - R with ``lintr`` [GH-512] - - Lua with ``luacheck`` [GH-591] [GH-609] - - SCSS with ``scss-lint`` [GH-582] [GH-598] - -- New features: - - - Add ``flycheck-disable-checker`` to disable a syntax checker in the current - buffer - - Add ``flycheck-global-modes`` to control in which modes - ``global-flycheck-mode`` turns on ``flycheck-mode`` - - Add ``pedantic`` and ``pedantic-errors`` options to Clang and GCC [GH-543] - - Add ``flycheck-foodcritic-tags`` to select tags for Foodcritic [GH-560] - -- Improvements: - - - ``chef-foodcritic`` handles relative paths correctly now [GH-556] - - Global Flycheck Mode enables Flycheck Mode even if there is no syntax - checker for the buffer yet [GH-568] - - ``handlebars`` now supports Web Mode [GH-605] - - Extract error IDs from ``rustc`` - - Don’t cache last syntax checker in buffer anymore - -- Bug fixes: - - - Fix void variable error when trying to use ``flycheck-compile`` with a - non-command checker [GH-563] - - Fix faulty mode line reporting [GH-564] - - Automatically initialize packages when checking ``user-init-file`` - - Properly initialize hook variables [GH-593] - - Fix handling of file names with symbolic links for some checkers [GH-561] - - Parse multiline type errors from ``rustc`` [GH-592] - -0.22 (Dec 23, 2014) -------------------- - -- **Breaking changes**: - - - Never allow use of disabled checkers anymore, even with - ``flycheck-select-checker`` - - Error parsers **must** set the ``:buffer`` and ``:checker`` slots of - ``flycheck-error`` now - - The internals of syntax checker definitions have changed again. **All - packages depending on Flycheck must be recompiled!** [GH-524] - - ``flycheck-error-list-refresh`` is not an interactive command anymore - - Replace ``flycheck-perlcritic-verbosity`` with - ``flycheck-perlcritic-severity`` - - Replace ``flycheck-copy-messages-as-kill`` with - ``flycheck-copy-errors-as-kill`` [GH-529] - - Remove ``flycheck-google-messages`` command - - Options and config file variables are not buffer-local anymore [GH-546] - -- New syntax checkers: - - - Python with ``py_compile`` [GH-484] - -- New features: - - - ``flycheck-ert.el`` library to write unit tests for Flycheck extensions - - Add ``flycheck-define-generic-checker`` to define syntax checkers over - arbitrary Emacs Lisp functions [GH-169] [GH-524] - - Add ``flycheck-define-command-checker`` as non-macro variant of - ``flycheck-define-checker`` [GH-524] - - Add support for IDs of errors [GH-529] - - Add special ``id`` sexp to parse error ids with ``:error-patterns`` [GH-529] - - Parse error IDs from Checkstyle XML [GH-259] - - ``flycheck-copy-errors-as-kill`` can put error ids into kill ring now - [GH-529] - - Parse error IDs from many error checkers [GH-259] - - Verify Flycheck setup in a buffer with ``flycheck-verify-setup`` [GH-338] - - Add options for arbitrary arguments to some syntax checkers [GH-542] - - Add ``flycheck-flake8-error-level-alist`` to customize error levels from - flake8 [GH-454] - -- Improvements: - - - Automatically disable syntax checkers that report too many errors [GH-476] - - Reduce filesystem access when parsing errors to improve parsing speed - - Add explicit ``load-path`` inheritance to ``flycheck-emacs-lisp-load-path``, - via new ``inherit`` value [GH-511] - - Parse help messages from ``rustc`` [GH-517] - - ``g`` in the error list checks the source buffer again [GH-532] - - ``haskell-ghc`` supports literate Haskell now [GH-535] - -- Bug fixes: - - - Properly parse notes in ``sh-shellcheck`` [GH-508] - - Fix shell quoting in ``flycheck-compile`` [GH-522] [GH-523] - - Fix faulty properties of customize options which broke ``customize-changed`` - and related functions - - Fix use deprecated option in ``coffee-coffeelint`` - - Fix error columns of ``python-pylint`` and ``tex-chktex`` [GH-536] - - Correctly compute error level of errors on included files in ``c/c++-clang`` - and ``c/c++-gcc`` [GH-451] - -0.21 (Oct 26, 2014) -------------------- - -- **Breaking changes**: - - - ``html-tidy`` is not enabled in Web Mode anymore [GH-464] - - ``d-dmd`` now requires DMD 2.066 or newer [GH-460] - - ``:next-checkers`` now requires the maximum permissible level instead of a - custom predicate [GH-472] - - Remove ``flycheck-error-list-highlight-at-point`` face and related - functionality [GH-490] - -- New syntax checkers: - - - Coq - - RPM spec files with ``rpmlint`` [GH-480] [GH-481] - -- New features: - - - Add ``null-device`` symbol for syntax checker commands - - Add ``flycheck-display-error-messages-unless-error-list`` for - ``flycheck-error-display-function`` - - Add ``flycheck-error-list-after-refresh-hook`` to run after the error list - refreshes - - Add ``flycheck-navigation-minimum-level`` to restrict error levels available - for navigation [GH-398] [GH-485] - - The error list can be sorted by message and syntax checker name now [GH-500] - - Add ``flycheck-error-list-checker-name`` face to customize the appearance of - the syntax checker name in the error list [GH-500] - - Add ``flycheck-shellcheck-excluded-warnings`` to exclude warnings from - ShellCheck reports [GH-499] - - Add ``flycheck-add-mode`` to add a new major mode to a syntax checker - [GH-506] - - Add ``flycheck-gcc-openmp`` to enable OpenMP for GCC in C/C++ [GH-507] - -- Improvements: - - - Improve GCC syntax checking by expanding templates [GH-459] - - ``d-dmd`` reports errors with columns now [GH-460] - - Remove Projectile-based config file search [GH-461] - - Do not change point when navigating in the error list [GH-487] - - ShellCheck warnings now include the corresponding warning code - -- Bug fixes: - - - Expand ``default-directory`` before using it, to handle abbreviated paths - gracefully [GH-434] - - Restore mouse support in the error list [GH-468] - - ``less`` now correctly resolves relative paths in ``data-uri`` [GH-471] - - ``go-errcheck`` now properly uses package names as syntax checker arguments - - ``c/c++-clang`` now handles empty error messages [GH-497] - -0.20 (Aug 12, 2014) -------------------- - -- **Breaking changes**: - - - The internal names of syntax checker properties changed. **All packages - depending on Flycheck must be recompiled!** - - ``flycheck-substitute-argument`` always returns a list now - - The special meaning of a trailing ``=`` in ``(option …)`` and ``(config-file - …)`` is removed. Both arguments must now explicitly specify ``concat`` to - prepend the option as string. - -- New syntax checkers: - - - C/C++ with GCC [GH-408] - - Scala with scalastyle [GH-425] - - Fortran with GFortran [GH-414] [GH-450] - - Ada with GNAT [GH-414] [GH-457] - -- New features: - - - Add ``flycheck-clang-no-exceptions`` and ``flycheck-gcc-no-exceptions`` to - flag exceptions as errors in C++ [GH-412] - - Add ``flycheck-rust-crate-root`` to resolve inter-crate references in - ``rust`` [GH-417] - - Add ``flycheck-clang-blocks`` to enable the block syntax in Clang [GH-420] - - ``read-flycheck-checker`` now accepts a default value - - Add ``flycheck-status-changed-functions`` to react on status changes - - Make the mode line lighter of Flycheck customizable with - ``flycheck-mode-line`` - - Add ``flycheck-rubylintrc`` to support configuration files for - ``ruby-rubylint`` [GH-424] - - Add ``flycheck-rust-crate-type`` to make the Crate type customizable - [GH-446] - - The mode line of the error list is now customizable with - ``flycheck-error-list-mode-line`` [GH-454] - - Pressing ``n`` or ``p`` in the error list now shows the error at point in a - separate window [GH-452] [GH-454] - - Pressing ``RET`` in the error list now jumps to the error at point [GH-454] - - The error list can now be sorted by error level by clicking on the - corresponding list header, or by pressing ``S`` with point on the column - text [GH-454] - - Error levels defined with ``flycheck-define-error-level`` can now have a - numeric severity used for sorting [GH-454] - -- Improvements: - - - Use proper temporary files in ``python-flake8`` [GH-421] - - Demote errors from ``package-initialize`` in the ``emacs-lisp`` checker - [GH-423] - - ``flycheck-select-checker`` now uses the last used syntax checker as default - when reading from minibuffer - - ``flycheck-compile`` now prompts for the syntax checker to run as - ``compile`` command [GH-428] - - The ``rust`` syntax checker shows info messages now [GH-439] - - The ``sass`` and ``scss`` syntax checkers now use a temporary directory for - their cache [GH-443] [GH-454] - - Change the default of ``flycheck-eslintrc`` to ``nil`` [GH-447] - - Show the menu on the mode line lighter [GH-365] - - Greatly improve Flycheck's menu - - ``n`` and ``p`` now navigate the error list by errors, not by lines - [GH-452][GH-444] - - ``c/c++-clang`` does not use in-place temporary files anymore [GH-456] - -- Bug fixes: - - - Properly support ``unload-feature`` now - -- Other changes: - - - Remove dependencies on f.el and s.el - -0.19 (Jun 12, 2014) -------------------- - -- Flycheck now has an official logo [GH-331] - -- **Breaking changes**: - - - The ``ruby-rubylint`` syntax checker now requires Ruby Lint 2.0 or - newer. [GH-405] - -- New syntax checkers: - - - Go with ``errcheck`` [GH-393] - -- New features: - - - Add ``flycheck-keymap-prefix`` to change the prefix key for Flycheck - keybindings [GH-381] - - Make the prefix of Flycheck's temporary files customizable with - ``flycheck-temp-prefix`` [GH-387] - - Add ``:error-filter`` property for syntax checkers to apply a custom - function to modify or filter errors after parsing [GH-397] - - Add ``flycheck-rust-check-tests`` to disable syntax checking of test code in - Rust [GH-406] - - Add ``flycheck-cppcheck-inconclusive`` to enable cppcheck tests that might - give false positives [GH-407] - -- Improvements: - - - Collapse redundant whitespace in messages from ``emacs-lisp`` [GH-397] - - Dedent messages from ``haskell-ghc`` [GH-397] - - Fold errors in included files into the error messages of the corresponding - include in ``c/c++-clang`` [GH-397] - - The ``ruby-rubylint`` syntax checker now supports ruby-lint 2.0 and newer - [GH-405] - -- Bug fixes: - - - When stopping Flycheck, correctly kill running processes and cleanup their - temporary files [GH-334] - - Do not choke on files without extensions in ``haskell-ghc`` - - Fix spurious warning when a syntax checker reports errors, but not for the - file being checked [GH-391] - - Do not signal errors in Go Mode, when ``go`` is not available - -0.18 (Mar 24, 2014) -------------------- - -- **Breaking changes**: - - - The POSIX script syntax checkers ``sh-bash`` and ``sh-dash`` were renamed to - ``sh-posix-bash`` and ``sh-posix-dash`` respectively. The ``bash`` and - ``zsh`` syntax checkers were renamed to ``sh-bash`` and ``sh-zsh`` - respectively. Thus, all shell script syntax checkers now live in the ``sh-`` - prefix. - - ``rst-sphinx`` requires Sphinx 1.2 or newer now. - - ``rustc`` requires Rust 0.10 (not yet released at the time of writing) or - newer now [GH-353] - -- New syntax checkers: - - - Perl with Perl Critic [GH-88] - - Replace GNU Make with POSIX Make [GH-322] - - Shellcheck [GH-267] - - Go with ``golint`` [GH-328] - - Go with ``go tool vet`` [GH-329] - -- New features: - - - Add ``flycheck-rust-library-path`` to specify library locations for ``rust`` - - Add ``flycheck-dmd-include-path`` to change the include path of ``d-dmd`` - [GH-344] - -- Improvements: - - - ``flycheck-parse-checkstyle`` supports ``info`` level messages now - - Correctly parse multiline error messages of ``go-build`` and ``go-test`` - - ``rst-sphinx`` supports custom nodes without explicit writer support now, by - using the ``pseudoxml`` builder. - - Avoid warnings about missing main functions in ``rust`` - - Properly resolve relative filenames in ``.. include::`` directives in - ``rst`` - - Use ``--unix_mode`` option in ``javascript-gjslint`` to get the file name - [GH-348] - - Puppet Lint messages now include the name of the corresponding check - - ``rustc`` supports upcoming Rust 0.10 now [GH-353] - - Flycheck now handles Clang errors from included files [GH-367] - -0.17 (Feb 1, 2014) ------------------- - -- The manual was ported to Sphinx_ and is now located at - http://flycheck.readthedocs.org [GH-274] - -- **Breaking changes**: - - - The default ``flycheck-completion-system`` was changed to nil, i.e. the - built-in ``completing-read``, for compliance with Emacs' defaults. To - restore the previous behaviour, add ``(eval-after-load 'flycheck '(setq - flycheck-completion-system 'ido))`` to your ``init.el``. - - ``flycheck-count-errors`` counts errors of all levels now, and returns an - alist mapping error symbols to error counts. - -- New syntax checkers: - - - RST (ReStructuredText) using Sphinx - - GNU Make [GH-321] - -- New features: - - - Extend syntax checkers with ``flycheck-add-next-checkers`` [GH-266] - -- Improvements: - - - Immediately re-check the buffer when it was changed during a syntax check - [GH-301] - - Do not defer syntax checker after idle change timeout [GH-305] - - Do not use the generic ``rst`` syntax checker in Sphinx projects - anymore, to avoid false positives by Sphinx-only markup - - Check for more than just syntax errors in ``rust`` [GH-314] - - ``chef-foodcritic`` supports ``enh-ruby-mode`` now - -- Bug fixes - - - Do not attach syntax checker processes to the buffer anymore - [GH-298] - - Do not visit the file to check in ``emacs-lisp`` and - ``emacs-lisp-checkdoc`` to avoid unintended side effects [GH-319] - -0.16 (Jan 11, 2014) -------------------- - -- **Breaking changes**: - - - Argument substitution is no longer performed on syntax checker - executables. The executable must be a string. - - Split out ``haskell-hdevtools`` into a separate package. See - flycheck-hdevtools_ [GH-275] - - Drop support for coffeelint 0.x - - The error list is reimplemented on top of Tabulated List Mode. This greatly - changes the appearance and behaviour of the error list [GH-230] - -- New syntax checkers: - - - Ruby with ``ruby-lint`` [GH-250] - - Handlebars [GH-270] - - YAML with ``yaml-jsyaml`` [GH-253] - - Chef recipes with ``foodcritic`` [GH-255] - - AsciiDoc [GH-276] - - CFEngine [GH-271] - - Racket [GH-277] - - Texinfo - - Verilog [GH-296] - - Javascript with ``eslint`` [GH-291] - - ERuby [GH-285] - -- New features: - - - Define variables to override the executables of syntax checkers [GH-272] - - Interactively set the executable of a syntax checker with - ``flycheck-set-checker-executable`` [GH-272] - - Disable syntax checkers easily with ``flycheck-disabled-checkers`` [GH-269] - - Add support for the Compass CSS framework in the ``sass`` and ``scss`` - checkers, with ``flycheck-sass-compass`` and ``flycheck-scss-compass`` - respectively [GH-268] - - Disable style checks in ``ruby-rubocop`` with ``flycheck-rubocop-lint-only`` - [GH-287] - - Add support for Microsoft extensions in ``c/c++-clang`` via - ``flycheck-clang-ms-extensions`` [GH-283] - - New faces ``flycheck-error-list-info``, ``flycheck-error-list-warning``, - ``flycheck-error-list-error``, ``flycheck-error-list-line-number`` and - ``flycheck-error-list-column-number`` [GH-230] - - Add ``flycheck-ghc-no-user-package-database`` to disable the user package - database for ``haskell-ghc`` - - Add ``flycheck-ghc-package-databases`` to add additional package databases - to ``haskell-ghc`` - - Add ``flycheck-ghc-search-path`` to add additional directories to the search - path of ``haskell-ghc`` - -- Improvements: - - - Demote Rubocop convention messages to ``info`` level - - Stop Flycheck before the buffer is reverted [GH-282] - - Properly resolve local module imports in ``haskell-ghc`` - -- Bug fixes: - - - Make relative imports work with ``python-pylint`` [GH-280] - - Fix parsing of errors in ``scss`` and ``sass`` - -.. _flycheck-hdevtools: https://github.com/flycheck/flycheck-hdevtools - -0.15 (Nov 15, 2013) -------------------- - -- Flycheck has a new home at https://github.com/flycheck/flycheck, the online - manual moved to http://flycheck.github.io. - -- **Breaking changes**: - - - Do not add the current directory to the ``emacs-lisp`` syntax checker load - path - - ``flycheck-list-errors`` cannot list errors at point anymore. It does not - accept a prefix argument anymore, and takes zero arguments now [GH-214] - - ``flycheck-display-errors-in-list`` is gone. The error list automatically - highlights the error at point now [GH-214] - - Remove obsolete ``flycheck-declare-checker`` - -- New syntax checkers: - - - YAML [GH-236] - - Javascript with ``gjslint`` [GH-245] - - Slim [GH-246] - - PHP using ``phpmd`` [GH-249] - -- New features: - - - Support IDO or Grizzl_ as completion systems for ``flycheck-select-checker`` - at ``C-c ! s`` - - Disable standard error navigation with - ``flycheck-standard-error-navigation`` [GH-202] - - Add ``flycheck-clang-language-standard`` to choose the language - standard for C/C++ syntax checking [GH-207] - - Add ``flycheck-clang-definitions`` to set additional definitions for C/C++ - syntax checking [GH-207] - - Add ``flycheck-clang-no-rtti`` to disable RTTI for C/C++ syntax checking - [GH-207] - - Add new option cell ``option-flag`` for boolean flags in syntax checker - commands - - Add ``flycheck-clang-includes`` to include additional files for C/C++ syntax - checking [GH-207] - - Add configuration file variable ``flycheck-pylintrc`` for Pylint - - New faces ``flycheck-error-list-highlight-at-point`` and - ``flycheck-error-list-highlight`` to highlight the errors at point and at - the current line respectively in the error list [GH-214] - - The error list now automatically updates to show the errors of the current - buffer [GH-214] - - Define new error levels with ``flycheck-define-error-level`` [GH-212] - - Add ``flycheck-clang-standard-library`` to choose the standard library for - C/C++ syntax checking [GH-234] - - Customize the delay for displaying errors via - ``flycheck-display-errors-delay`` [GH-243] - - Add ``info`` level for informational annotations by syntax checkers [GH-215] - - Add a new symbol ``temporary-file-name`` to pass temporary file names to - syntax checkers [GH-259] - -- Improvements: - - - The error list now refreshes automatically after each syntax check [GH-214] - - The errors at point are now automatically highlighted in the error list - [GH-214] - - ``emacs-lisp-checkdoc`` does not longer check ``.dir-locals.el`` files - - Do not automatically check syntax in encrypted files [GH-222] - - Parse notes from ``c/c++-clang`` into info level messages [GH-215] - - Parse convention warnings from ``pylint`` to info level [GH-204] - - Demote naming warnings from ``python-flake8`` to info level [GH-215] - - Support ``enh-ruby-mode`` in Ruby syntax checkers [GH-256] - - Parse columns from ``python-pylint`` errors - - Do not compress temporary files for syntax checks if the original file was - compressed - -- Bug fixes: - - - Find local includes in the Clang syntax checker [GH-225] - - Do not emit spurious flawed definition warning in the ``rst`` syntax checker - - Handle abbreviated file names in ``luac`` output, by simply ignoring them - [GH-251] - - Correctly redirect the output binary of the ``go-build`` syntax checker - [GH-259] - - Fix Cppcheck parsing with the built-in Emacs XML parser [GH-263] - -.. _Grizzl: https://github.com/grizzl/grizzl - -0.14.1 (Aug 16, 2013) ---------------------- - -- Bug fixes: - - - Add a missing dependency [GH-194] - -0.14 (Aug 15, 2013) -------------------- - -- **Breaking changes**: - - - Introduce ``flycheck-define-checker`` and obsolete - ``flycheck-declare-checker`` [GH-163] - - Remove the obsolete ``flycheck-error-face`` and ``flycheck-warning-face`` - - Do not initialize packages by default in ``emacs-lisp`` syntax checker for - non-configuration files [GH-176] - - Change the default ``flycheck-highlighting-mode`` to ``symbols`` [GH-179] - - Drop support for Pylint 0.x in ``python-pylint`` [GH-184] - -- New features: - - - List errors at point only with prefix arg to ``flycheck-list-errors`` - [GH-166] - - Add new display function ``flycheck-display-errors-in-list`` to display - errors at point in the error list [GH-166] - - New ``option-list`` argument cell to pass option lists to a syntax checker - - New ``flycheck-emacs-lisp-load-path`` option to customize the ``load-path`` - used by the ``emacs-lisp`` syntax checker [GH-174] - - New ``flycheck-emacs-lisp-initialize-packages`` option to initialize - packages in the ``emacs-lisp`` syntax checker [GH-176] - - New ``flycheck-emacs-lisp-package-user-dir`` option to configure the package - directory for the ``emacs-lisp`` syntax checker [GH-176] - - New option filter ``flycheck-option-comma-separated-list`` for options with - comma separated lists as values - - New highlighting mode ``symbols`` to highlight the symbol pointed to by an - error [GH-179] - -- New syntax checkers: - - - LESS [GH-160] - - Haskell with ``ghc``, ``hdevtools`` and ``hlint`` [GH-162] - - C/C++ with ``cppcheck`` [GH-170] - - C/C++ with ``clang`` [GH-172] - - CoffeeScript with ``coffee`` - - XML with ``xmllint`` [GH-180] - - D with ``dmd`` [GH-167] - -- Improvements: - - - Support Web Mode in ``html-tidy`` syntax checker [GH-157] - - Support Rubocop 0.9 and drop support for older Rubocop releases [GH-159] - - Include the message ID in error messages from ``python-pylint`` - -- Bug fixes: - - - Fix warnings about flawed definitions in ``emacs-lisp`` and - ``emacs-lisp-checkdoc``, caused by faulty formatting of sexps - - Refresh error lists when pressing ``g`` [GH-166] - - Do not obscure active minibuffer input when displaying errors in the echo - area [GH-175] - - Fix universal prefix argument for ``flycheck-next-error`` at ``C-c ! n`` - - Correctly parse output of ``coffeelint`` 0.5.7 [GH-192] - - Correctly parse output of ``pylint`` 1.0 [GH-184] - -0.13 (Jun 28, 2013) -------------------- - -- **Breaking changes**: - - - Obsolete ``flycheck-warning-face`` and ``flycheck-error-face`` in favor - ``flycheck-warning`` and ``flycheck-error`` respectively - - Obsolete ``:predicate`` forms in favor of ``:predicate`` functions - - ``flycheck-def-config-file-var`` does not automatically mark variables as - safe anymore - -- New features: - - - Make fringe indicator faces customizable independently with - ``flycheck-fringe-error`` and ``flycheck-fringe-warning`` - - Improve the default faces by using underlines instead of foreground colors, - if possible - - Customizable error processing with ``flycheck-process-error-functions`` - [GH-141] - - Make the delay before starting a syntax check customizable via - ``flycheck-idle-change-delay`` [GH-144] - - Make display of errors under point customizable via - ``flycheck-display-errors-function`` [GH-156] - -- Improvements - - - Always highlight errors on top of warnings now - - Do not trigger syntax checks in the middle of commands [GH-141] - - Add the current directory to load path in the ``emacs-lisp`` syntax checker - - Do not longer use the ``emacs-lisp-checkdoc`` syntax checker in Scratch - buffers - - Do not flush temporary files onto disk [GH-149] - - Syntax checkers may have error patterns and error parser now - - Predicate forms are now wrapped into functions and compiled into functions - during byte compilation - - Copy each message separately in ``flycheck-copy-messages-as-kill`` - - Mark some customizable variables as safe for file variable usage, most - notably ``flycheck-indication-mode``, ``flycheck-highlighting-mode`` and - ``flycheck-idle-change-delay``. - -- Bug fixes: - - - Fix error when searching for a configuration file outside a Projectile - project - - Do not start a syntax check before the ``flycheck-mode-hook`` was run - - Do not start automatic syntax checks if Flycheck Mode is disabled - - Defer the initial syntax check until after the current interactive command - [GH-143] - - Correctly clean up information about running processes - - Fix compatibility with Emacs 24.2 and earlier [GH-150] - - Fix version information on Emacs trunk builds - -0.12 (May 18, 2013) -------------------- - -- New syntax checkers: - - - Ruby using ``jruby`` [GH-136] - - Puppet [GH-138] - -- New features: - - - Highlight error expressions by default, with the new ``sexps`` highlighting - mode - - Automatically check syntax some time after the last change in the buffer - [GH-140] - - Add ``flycheck-version`` to determine the installed Flycheck version - - Add ``flycheck-list-errors``, mapped to ``C-c ! l``, to list all errors in a - separate buffer - -- Improvements: - - - Defer syntax checks while a buffer is reverted, to avoid race conditions - -- Bug fixes: - - - Correctly parse syntax errors from JRuby [GH-136] - -0.11 (May 01, 2013) -------------------- - -- New syntax checkers: - - - Scala [GH-124] - -- New features: - - - Customizable error indication with control of the fringe side, via - ``flycheck-indication-mode`` - - Customizable automatic syntax checking, via - ``flycheck-check-syntax-automatically`` [GH-128] - - Customizable configuration file search, via - ``flycheck-locate-config-file-functions`` [GH-133] - - Find configuration files in Projectile_ projects - - Add ``flycheck-before-syntax-check-hook`` and - ``flycheck-syntax-check-failed-hook`` - -- Improvements: - - - The ``ruby`` syntax checker now differentiates warnings from errors [GH-123] - - Faces are now in a separate customization group - -- Bug fixes: - - - Add missing customization group for syntax checker options - -.. _Projectile: https://github.com/bbatsov/projectile - -0.10 (Apr 21, 2013) -------------------- - -- Flycheck uses ``cl-lib`` now. This library is built-in as of GNU Emacs - 24.3. For earlier releases of GNU Emacs 24 an additional compatibility library - will be installed from GNU ELPA. - -- New syntax checkers: - - - POSIX Shell script using ``bash`` [GH-112] - - Ruby using ``rubocop`` [GH-113] - - Elixir [GH-108] - - Erlang [GH-122] - -- Removed syntax checkers: - - - Python using Pyflakes. Use the superior Flake8 syntax checker [GH-115] - -- New features: - - - Add ``flycheck-copy-messages-as-kill``, mapped to ``C-c ! C-w``, to copy all - error messages under point into kill ring - - Add ``flycheck-google-messages``, mapped to ``C-c ! /``, to google for error - messages under point. Needs the `Google This`_ library - - Syntax checkers can redirect output to a temporary directory now using the - ``temporary-directory`` argument symbol - -- Improvements: - - - Call option filters for ``nil`` values, too - - Improve error parsing in Bash syntax checker [GH-112] - - Error navigation does not cross restrictions in narrowed buffers anymore - - Try to preserve the non-directory part of the buffer's file name when - substituting the ``source`` symbol [GH-99] - -- Bug fixes: - - - Fix error highlighting and navigation in narrowed buffers - - Use a hopefully more reliable way to parse output of PHP - CodeSniffer [GH-118] - -.. _Google This: https://github.com/Malabarba/emacs-google-this - -0.9 (Apr 13, 2013) ------------------- - -- New syntax checkers: - - - SCSS using ``scss`` [GH-103] - - RST (ReStructuredText) using Docutils - - Go using ``go build`` and ``go test`` [GH-107] - -- Improvements: - - - Quit the error message window when navigating away from error locations - -0.8 (Apr 9, 2013) ------------------ - -- New syntax checkers: - - - Go using ``gofmt`` [GH-91] - - Rust using ``rustc`` [GH-101] - -- New features: - - - Add a global Flycheck mode. ``(global-flycheck-mode)`` is now the - recommended way to enable Flycheck [GH-29] - - Add support for syntax checker options [GH-72] - - Add option for the coding standard used by the ``php-phpcs`` syntax checker - - Add options for the maximum McCabe complexity and the maximum line length to - ``python-flake8`` - -- Improvements: - - - Support McCabe warnings in ``python-flake8`` - - Support warnings from ``flake8`` 2 - - Show long error messages in a popup buffer [GH-94] - - Show all error messages at point [GH-96] - - Add support for naming warings from ``flake8`` 2 [GH-98] - - Flycheck mode is not longer enabled for buffers whose names start with a - space - - Improve highlighting to reduce screen flickering [GH-100] - -0.7.1 (Feb 23, 2013) --------------------- - -- Bug fixes: - - - Do not signal errors from ``flycheck-mode`` [GH-87] - - Correctly fall back to ``$HOME`` when searching configuration files - - Correctly ascend to parent directory when searching configuration files - -- API changes: - - - Rename ``config`` cell to ``config-file`` - - Allow to pass the result of ``config-file`` cells as single argument - - Add support for evaluating Lisp forms in syntax checker commands [GH-86] - -0.7 (Feb 14, 2013) ------------------- - -- New features: - - - Navigate to source of syntax checker declarations from syntax checker help - - Add online Info manual [GH-60] - -- Improvements: - - - Use pipes instead of TTYs to read output from syntax checkers - - Defer syntax checks for invisible buffers [GH-80] - - Immediately display error messages after error navigation [GH-62] - -- Bug fixes: - - - Never select deleted buffers - - Do not let the debugger interfere with necessary cleanup actions - - Do not attempt to parse empty XML trees [GH-78] - - Fix infinite recursion on Windows [GH-81] - -0.6.1 (Jan 30, 2013) --------------------- - -- Fix package dependencies - -0.6 (Jan 29, 2013) ------------------- - -- New syntax checkers: - - - Emacs Lisp with ``checkdoc-current-buffer`` [GH-53] - - PHP with PHP CodeSniffer [GH-72] - -- Removed syntax checkers: - - - Javascript with ``jsl`` - -- New features: - - - Error navigation with ``next-error`` and ``previous-error`` [GH-26] - - Fringe icons instead of error indicators [GH-33] - - Menu entry for Flycheck [GH-59] - - Customizable error highlighting, taking the column number into account - [GH-35] - - Configuration files for syntax checkers - - Add configuration file support to the syntax checkers ``coffee-coffeelint``, - ``html-tidy``, ``javascript-jshint``, ``pyton-flake8`` and ``tex-chktex`` - - Allow to compile a buffer with a syntax checker for testing purposes [GH-58] - - Use multiple syntax checkers during a syntax check [GH-31] - - Add dedicated help for syntax checkers [GH-52] - -- Improvements: - - - Match error patterns in order of declaration [GH-55] - -- Bug fixes: - - - Inherit highlighting faces from built-in faces [GH-24] - - Correct error patterns of the HTML syntax checker [GH-36] - - Detect syntax errors in the ``python-flake8`` syntax checker - [GH-42] - - Fix various regressions after introducing unit tests - - Inhibit syntax checking during package installation [GH-45] - - Disable syntax checking in Tramp buffers [GH-54] - - Preserve whitespace in error messages [GH-65] - -- API changes: - - - Replace syntax checker variables with syntax checker declarations [GH-41] - - Support parsing errors with arbitrary functions instead of error patterns - [GH-38] - - Add an error parser for Checkstyle-like XML output [GH-38] - -0.5 (Dec 28, 2012) ------------------- - -- New syntax checkers: - - - SASS [GH-15] - - Perl [GH-21] - - XML - - Lua [GH-30] - -- New features: - - - Support manual buffer-local selection of syntax checker [GH-25] - - Add customizable error indicators [GH-28] - - Echo error messages at point without 3rd-party libraries like - flymake-cursor_ [GH-27] - -- Improvements: - - - Remember the last automatically selected syntax checker [GH-24] - -- Bug fixes: - - - Fix syntax checking of buffers without backing files [GH-19] - -- API changes: - - - Replace underlying Flymake API with a custom syntax checking implementation - [GH-15] - -.. _flymake-cursor: https://www.emacswiki.org/emacs/FlymakeCursor - -0.4 (Nov 21, 2012) ------------------- - -- Rename the project to Flycheck [GH-5] -- New syntax checkers - - - HAML [GH-9] - - CSS [GH-9] - - Javascript with ``jsl`` [GH-9] - - Javascript with ``jshint`` [GH-16] - - JSON [GH-12] - - LaTeX with ``lacheck`` - -- Bug fixes: - - - Fix type error when checking compressed Emacs Lisp [GH-10] - -0.3 (Nov 21, 2012) ------------------- - -- Replace ``flymake-mode`` with a custom syntax checking minor mode [GH-4] - -0.2 (Oct 25, 2012) ------------------- - -- New syntax checkers: - - - PHP - -- API changes: - - - Simplify syntax checker declarations [GH-2] - -0.1 (Oct 11, 2012) ------------------- - -Initial release as flymake-checkers - -- New syntax checkers: - - - TeX/LaTeX - - Shell scripts - - Python - - Ruby - - Coffeescript - - Emacs Lisp diff --git a/emacs.d/vendor/flycheck/CHANGES.rst b/emacs.d/vendor/flycheck/CHANGES.rst deleted file mode 100644 index 48aeb30..0000000 --- a/emacs.d/vendor/flycheck/CHANGES.rst +++ /dev/null @@ -1,412 +0,0 @@ -33-cvs (in development) -======================= - -- New features and improvements - - - The ``flycheck-verify-setup`` UI now includes buttons to re-enable manually - disabled checkers and to try to re-enable automatically disabled checkers - (command checkers are automatically disabled when their executable cannot be - found). [GH-1755] - - Error explainers can now return URLs (to show a webpage) or functions (to - use custom formatting). For example, the Rust checker now renders - explanations using ``markdown-view-mode``. [GH-1753] - -- **Breaking changes** - - - The variable ``flycheck-current-errors`` now contains errors in the order in - which they were returned by checkers. In previous versions of Flycheck, - this list was sorted by error position and severity. [GH-1749] - -32-cvs (frozen on May 3rd, 2020) -================================ - -- Highlights - - - Many checkers and compiler, such as ``ocaml``, ``rust``, ``eslint``, and - others, include end-line and end-column information. Flycheck can now - highlight the exact region that they report. Authors of checker definitions - can use the new ``:end-line`` and ``:end-column`` arguments in - ``flycheck-error-new``, or the new ``end-line`` and ``end-column`` fields in - error patterns. [GH-1400] - - - Errors that checkers return for other files will now be displayed on the - first line of the current buffer instead of begin discarded. The error list - indicates which file each error came from, and navigation moves - automatically moves between files. This change helps with compiled - languages, where an error in another file may cause the current file to be - considered invalid. Variables ``flycheck-relevant-error-other-file-show`` - and ``flycheck-relevant-error-other-file-minimum-level`` control this - behavior. [GH-1427] - - - Flycheck can now draw error indicators in margins in addition to fringes. - Margins can contain arbitrary characters and images, not just monochrome - bitmaps, allowing for a better experience on high-DPI screens. - ``flycheck-indication-mode`` controls this behavior, and - ``flycheck-set-indication-mode`` can be used to automatically adjust the - fringes and margins. Additionally, Flycheck's will now use high-resolution - fringe bitmaps if the fringe is wide enough [GH-1742, GH-1744] - - - Error highlighting is now configurable, using the new - ``flycheck-highlighting-style`` variable: instead of applying - level-dependent faces (typically with wavy underlines), Flycheck can now - insert delimiters around errors, or mix styles depending on how many lines - an error covers. Additionally, stipples are added in the fringes to - indicate errors that span multiple lines. [GH-1743] - -- New features and improvements - - - Flycheck can now trigger a syntax check automatically after switching - buffers, using the ``idle-buffer-switch`` option in - ``flycheck-check-syntax-automatically``. This is useful when errors in a - file are due to problems in a separate file. Variables - ``flycheck-idle-buffer-switch-delay`` and - ``flycheck-buffer-switch-check-intermediate-buffers`` control the - functionality. [GH-1297] - - Flycheck will now use Emacs' native XML parsing when libXML fails. This - behavior can be changed by customizing ``flycheck-xml-parser``. [GH-1349] - - ``flycheck-verify-setup`` now shows more clearly which checkers - will run in the buffer, and which are misconfigured. [GH-1478] - - Flycheck now locates checker executables using a customizable function, - ``flycheck-executable-find``. The default value of this function allows - relative paths (set e.g. in file or dir-local variables) in addition to - absolute paths and executable names. [GH-1485] - - Checkers that report error positions as a single offset from the start of - the file can use the new ``flycheck-error-new-at-pos`` constructor instead - of converting that position to a line and a column. [GH-1400] - - Config-file variables can now be set to a list of file names. This is - useful for checkers like mypy which don't run correctly when called from a - subdirectory without passing an explicit config file. [GH-1711] - - Thanks to algorithmic improvements in error reporting, Flycheck is now much - faster in large buffers. [GH-1750] - -- New syntax checkers: - - - Awk with ``gawk`` [GH-1708] - - Bazel with ``bazel-buildifier`` [GH-1613] - - CUDA with ``cuda-nvcc`` [GH-1508] - - CWL with ``schema-salad-tool`` [GH-1361] - - Elixir with ``credo`` [GH-1062] - - JSON with ``json-jq`` [GH-1568] - - Jsonnet with ``jsonnet`` [GH-1345] - - MarkdownLint CLI with ``markdownlint`` [GH-1366] - - mypy with ``python-mypy`` [GH-1354] - - Nix with ``nix-linter`` [GH-1530] - - Opam with ``opam lint`` [GH-1532] - - protobuf-prototool with ``prototool`` [GH-1591] - - Rust with ``rust-clippy`` [GH-1385] - - Ruumba with ``eruby-ruumba`` [GH-1616] - - Staticcheck with ``go-staticheck`` [GH-1541] - - terraform with ``terraform fmt``, ``tflint`` [GH-1586] - - Tcl with ``nagelfar`` [GH-1365] - - Text prose with ``textlint`` [GH-1534] - - VHDL with ``ghdl`` [GH-1160] - -- Checker improvements: - - - ``python-pylint`` and ``python-flake8`` are now invoked with ``python -c``, - to make it easier to change between Python 2 and Python 3. [GH-1113] - - Add ``flycheck-perl-module-list`` to use specified modules when - syntax checking code with the ``perl`` checker. [GH-1207] - - ``rust-cargo`` now uses ``cargo check`` and ``cargo test``. [GH-1289] - - Add ``flycheck-ghc-stack-project-file`` for the - ``haskell-stack-ghc`` checker. [GH-1316] - - Add ``flycheck-cppcheck-suppressions-file`` to pass a suppressions - file to cppcheck. [GH-1329] - - Add ``--force-exclusion`` flag to ``rubocop`` command. [GH-1348] - - Flycheck now uses ESLint's JSON output instead of checkstyle XML. [GH-1350] - - Add ``flychjeck-eslint-args`` to pass arguments to ``javascript-eslint``. - [GH-1360] - - Flycheck will now execute ``rubocop`` from the directory where a ``Gemfile`` - is located. If a ``Gemfile`` does not exist, the old behaviour of running - the command from the directory where ``.rubocop.yml`` is found will be - used. [GH-1368] - - Add ``flycheck-sh-bash-args`` to pass arguments to ``sh-bash``. [GH-1439] - - ``haskell-stack-ghc`` will not try to install GHC anymore. [GH-1443] - - Add ``flycheck-ghdl-ieee-library`` to select which standard IEEE - library to use for ghdl. [GH-1547] - - The ``javascript-eslint`` checker now supports ``typescript-mode`` by - default. - - Add ``flycheck-erlang-rebar3-profile`` to select which profile to - use when compiling erlang with rebar3. [GH-1560] - - Add ``flycheck-relevant-error-other-file-show`` to avoid showing errors - from other files. [GH-1579] - - The ``nix-linter`` checker now has an error explainer. [GH-1586] - - The Emacs Lisp checker can now run in buffers not backed by files. [GH-1695] - -- **Breaking changes** - - - Remove the ``javascript-jscs`` checker. [GH-1024] - - Remove the ``elixir-dogma`` checker. [GH-1450] - - ``rust-cargo`` now requires Rust 1.17 or newer. [GH-1289] - - ``rust`` now requires 1.18 or newer. [GH-1501] - - Rename ``flycheck-cargo-rustc-args`` to ``flycheck-cargo-check-args``. - [GH-1289] - - ``rust-cargo`` does not use the variable ``flycheck-rust-args`` anymore. - [GH-1289] - - Improve detection of default directory for ``haskell-ghc`` to consider - ``hpack`` project files. [GH-1435] - - Replace ``go tool vet`` with ``go vet``. [GH-1548] - - Remove the deprecated ``go-megacheck`` checker, which is replaced by - ``go-staticcheck``. [GH-1583] - -31 (Oct 07, 2017) -================= - -- **Breaking changes** - - - ``rust-cargo`` now requires Rust 1.15 or newer [GH-1201] - - Remove javascript-gjslint checker - -- New syntax checkers: - - - Protobuf with ``protoc`` [GH-1125] - - systemd-analyze with ``systemd-analyze`` [GH-1135] - - Nix with ``nix-instantiate`` [GH-1164] - - Dockerfile with ``hadolint`` [GH-1194] - - AsciiDoc with ``asciidoctor`` [GH-1167] - - CSS/SCSS/LESS with ``stylelint`` [GH-903] - - Ruby with ``reek`` [GH-1244] - - Go with ``megacheck`` [GH-1290] - - LLVM IR with ``llc`` [GH-1302] - - Text prose with ``proselint`` [GH-1304] - -- New features: - - - Add ``flycheck-xml-xmlstarlet-xsd-path`` and ``flycheck-xml-xmllint-xsd-path`` to - specify an XSD schema to validate XML documents against [GH-1272] - - Add ``flycheck-tslint-args`` to pass additional arguments to tslint [GH-1186] - - Add an error explainer to the ``rpm-rpmlint`` checker using - ``rpmlint -I`` [GH-1235] - - Add ``flycheck-emacs-lisp-check-declare`` to check function declaration in - the ``emacs-lisp`` checker [GH-1286] - - Add ``flycheck-shellcheck-follow-sources`` to check included files when - using the ``sh-shellcheck`` checker [GH-1256] - -- Improvements: - - - Use option ``flycheck-go-build-tags`` for ``go-test``, - ``go-vet`` and ``go-errcheck`` as well. - - Add a revert function to ``flycheck-verify-setup``, so hitting - ``g`` reloads the buffer. - - Make sure the erlang compiler is only run on compilable files. - - ``flycheck-tslint`` does not crash any more on deprecation notices [GH-1174] - - ``rust-cargo`` now checks integration tests, examples and benchmarks - [GH-1206] - - ``rust-cargo`` does not use ``flycheck-rust-library-path`` anymore, as - dependencies are taken care of by Cargo [GH-1206] - - ``c/c++-gcc`` checker now works from GCC 4.4 and up [GH-1226] - -30 (Oct 12, 2016) -================= - -- **Breaking changes** - - - Flycheck now requires flake8 3.0 or newer - - Remove ``--config`` option in ``lua-luacheck`` in favour of ``luacheck``'s - own ``.luacheckrc`` detection. Therefore ``flycheck-luacheckrc`` is - no longer used [GH-1057] - - ``:modes`` is now mandatory for syntax checker definitions [GH-1071] - - Remove jade checker [GH-951] [GH-1084] - - Remove ``javascript-eslintrc`` and instead rely on eslint's own configuration file - search [GH-1085] - - ``C-c ! e`` explains errors now [GH-1122] - -- New syntax checkers: - - - Elixir with ``dogma`` [GH-969] - - sass and scss with ``sass-lint`` [GH-1070] - - Pug [GH-951] [GH-1084] - -- New features: - - - Add ``flycheck-cargo-rustc-args`` to pass multiple arguments to cargo rustc - subcommand [GH-1079] - - Add ``:error-explainer`` to ``flycheck-define-checker`` and - ``flycheck-explain-error-at-point`` to display explanations of errors - [GH-1122] - - Add an error explainer to the ``rust`` and ``rust-cargo`` checkers using - ``rustc --explain`` [GH-1122] - - Add ``:enabled`` property to ``flycheck-define-checker`` [GH-1089] - -- Improvements: - - - Do not use ``javascript-eslint`` if eslint cannot find a valid configuration - [GH-1085] - - Automatically disable syntax checkers which are not installed instead of - checking executable before each syntax check [GH-1116] - - Add patterns for syntax errors to ``scheme-chicken`` [GH-1123] - -29 (Aug 28, 2016) -================= - -- **Breaking changes** - - - Change ``flycheck-eslint-rulesdir`` (string) to - ``flycheck-eslint-rules-directories`` (list of strings) [GH-1016] - - Require rust 1.7 or newer for ``rust`` and ``rust-cargo`` [GH-1036] - -- New syntax checkers: - - - Slim with ``slim-lint`` [GH-1013] - - CHICKEN Scheme with ``csc`` [GH-987] - -- New features: - - - Add ``:working-directory`` option to ``flycheck-define-command-checker`` - [GH-973] [GH-1012] - - ``flycheck-go-build-install-deps`` turns on dependency installation for ``go test`` - as well as ``go build`` [GH-1003] - -- Improvements: - - - Add default directory for ``haskell-stack-ghc`` and ``haskell-ghc`` checkers - [GH-1007] - - ``rust`` and ``rust-cargo`` checkers now support the new error format of - rust 1.12 [GH-1016] - - ``flycheck-verify-checker`` and ``flycheck-verify-setup`` now include - information about configuration files of syntax checkers [GH-1021] [GH-1038] - -28 (Jun 05, 2016) -================= - -- **Breaking changes**: - - - Rename ``luacheck`` to ``lua-luacheck`` to comply with our naming - conventions - - Remove ``flycheck-cppcheck-language-standard`` in favour of - ``flycheck-cppcheck-standards`` which is a list of standards [GH-960] - -- New features: - - - Add option to set binary name for ``rust-cargo`` [GH-958] - - Add ``flycheck-cppcheck-standards`` to pass multiple code standards to - cppcheck [GH-960] - - Add ``flycheck-cppcheck-suppressions`` to suppress warnings for cppcheck - [GH-960] - -- Improvements: - - - Check Racket syntax in Geiser Mode [GH-979] - -- Bug fixes - - - Do not signal errors when tslint reports no output [GH-981] - - Do not generate invalid temporary filenames on Windows [GH-983] - -27 (May 08, 2016) -================= - -- **Breaking changes** - - - Require PHP Code Sniffer 2.6 or newer for ``php-phpcs`` [GH-921] - -- New syntax checkers: - - - Go with ``go-unconvert`` [GH-905] - - Markdown with ``mdl`` [GH-839] [GH-916] - - TypeScript with ``tslint`` [GH-947] [GH-949] - -- Improvements: - - - Pass checkdoc settings from Emacs to `emacs-lisp-checkdoc` [GH-741] [GH-937] - -- Bug fixes: - - - Fix parsing of syntax errors in triple-quoted strings for - ``python-pycompile`` [GH-948] - - Correctly handle rules based on the current file name in ``php-phpcs`` - [GH-921] - -26 (Apr 27, 2016) -================= - -Flycheck now has a `Code of Conduct`_ which defines the acceptable behaviour and -the moderation guidelines for the Flycheck community. [GH-819] - -Flycheck also provides a `Gitter channel`_ now for questions and discussions -about development. [GH-820] - -The native Texinfo manual is again replaced with a Sphinx_ based documentation. -We hope that this change makes the manual easier to edit and to maintain and -more welcoming for new contributors. The downside is that we can not longer -include a Info manual in Flycheck’s MELPA packages. - -From this release onward Flycheck will use a single continuously increasing -version number. Breaking changes may occur at any point. - -.. _Code of Conduct: http://www.flycheck.org/en/latest/community/conduct.html -.. _Gitter channel: https://gitter.im/flycheck/flycheck -.. _Sphinx: http://sphinx-doc.org - -- **Breaking changes**: - - - Remove ``flycheck-copy-messages-as-kill``, obsolete since Flycheck - 0.22 - - Remove ``flycheck-perlcritic-verbosity``, obsolete since Flycheck - 0.22 - - Replace ``flycheck-completion-system`` with - ``flycheck-completing-read-function`` [GH-870] - - JSON syntax checkers now require ``json-mode`` and do not check in - Javascript Mode anymore - - Prefer eslint over jshint for Javascript - - Obsolete ``flycheck-info`` in favour of the new ``flycheck-manual`` command - -- New syntax checkers: - - - Processing [GH-793] [GH-812] - - Racket [GH-799] [GH-873] - -- New features: - - - Add ``flycheck-puppet-lint-rc`` to customise the location of the - puppetlint configuration file [GH-846] - - Add ``flycheck-puppet-lint-disabled-checks`` to disable specific - checks of puppetlint [GH-824] - - New library ``flycheck-buttercup`` to support writing Buttercup_ specs for - Flycheck - - Add ``flycheck-perlcriticrc`` to set a configuration file for - Perl::Critic [GH-851] - - Add ``flycheck-jshint-extract-javascript`` to extract Javascript - from HTML [GH-825] - - Add ``flycheck-cppcheck-language-standard`` to set the language - standard for cppcheck [GH-862] - - Add ``flycheck-mode-line-prefix`` to customise the prefix of - Flycheck’s mode line lighter [GH-879] [GH-880] - - Add ``flycheck-go-vet-shadow`` to check for shadowed variables - with ``go vet`` [GH-765] [GH-897] - - Add ``flycheck-ghc-stack-use-nix`` to enable Nix support for Stack GHC - [GH-913] - -- Improvements: - - - Map error IDs from flake8-pep257 to Flycheck error levels - - Explicitly display errors at point with ``C-c ! h`` [GH-834] - - Merge message and checker columns in the error list to remove redundant - ellipsis [GH-828] - - Indicate disabled checkers in verification buffers [GH-749] - - Do not enable Flycheck Mode in ``fundamental-mode`` buffers [GH-883] - - Write ``go test`` output to a temporary files [GH-887] - - Check whether ``lintr`` is actually installed [GH-911] - -- Bug fixes: - - - Fix folding of C/C++ errors from included files [GH-783] - - Fix verification of SCSS-Lint checkstyle reporter - - Don’t fall back to ``rust`` if ``rust-cargo`` should be used [GH-817] - - Don’t change current buffer when closing the error message buffer [GH-648] - - Never display error message buffer in current window [GH-822] - - Work around a caching issue in Rubocop [GH-844] - - Fix checkdoc failure with some Emacs Lisp syntax [GH-833] [GH-845] [GH-898] - - Correctly parse Haskell module name with exports right after the module name - [GH-848] - - Don’t hang when sending buffers to node.js processes on Windows - [GH-794][GH-850] - - Parse suggestions from ``hlint`` [GH-874] - - Go errcheck handles multiple ``$GOPATH`` entries correctly now - [GH-580][GH-906] - - Properly handle Go build failing in a directory with multiple packages - [GH-676] [GH-904] - - Make cppcheck recognise C++ header files [GH-909] - - Don’t run phpcs on empty buffers [GH-907] - -.. _Buttercup: https://github.com/jorgenschaefer/emacs-buttercup diff --git a/emacs.d/vendor/flycheck/COPYING b/emacs.d/vendor/flycheck/COPYING deleted file mode 100644 index 94a9ed0..0000000 --- a/emacs.d/vendor/flycheck/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. 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 -them 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 prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. 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. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey 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; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If 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 convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU 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 that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - 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. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -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. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - 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 -state 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 3 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program 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, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU 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 Lesser General -Public License instead of this License. But first, please read -. diff --git a/emacs.d/vendor/flycheck/Cask b/emacs.d/vendor/flycheck/Cask deleted file mode 100644 index 57510bd..0000000 --- a/emacs.d/vendor/flycheck/Cask +++ /dev/null @@ -1,59 +0,0 @@ -(source gnu) -(source melpa) - -(package-file "flycheck.el") - -(files "flycheck.el" "flycheck-ert.el" "flycheck-buttercup.el") - -(development - (depends-on "f") ; For some maintenance tools - (depends-on "buttercup") ; BDD test framework for Emacs - (depends-on "shut-up") ; Silence Emacs - - ;; Various modes for use in the unit tests - (depends-on "adoc-mode") - (depends-on "bazel-mode") - (depends-on "coffee-mode") - (depends-on "cperl-mode") - (depends-on "cwl-mode") - (depends-on "d-mode") - (depends-on "dockerfile-mode") - (depends-on "elixir-mode") - (depends-on "erlang") - (depends-on "ess") - (depends-on "geiser") - (depends-on "go-mode") - (depends-on "groovy-mode") - (depends-on "haml-mode") - (depends-on "handlebars-mode") - (depends-on "haskell-mode") - (depends-on "js2-mode") - (depends-on "js3-mode") - (depends-on "rjsx-mode") - (depends-on "json-mode") - (depends-on "julia-mode") - (depends-on "less-css-mode") - (depends-on "lua-mode") - (depends-on "markdown-mode") - (depends-on "mmm-mode") - (depends-on "nix-mode") - (depends-on "php-mode") - (depends-on "processing-mode") - (depends-on "protobuf-mode") - (depends-on "pug-mode") - (depends-on "puppet-mode") - ;; (depends-on "racket-mode") ;; https://github.com/greghendershott/racket-mode/issues/461 - (depends-on "rhtml-mode") - (depends-on "rpm-spec-mode") - (depends-on "rust-mode") - (depends-on "sass-mode") - (depends-on "scala-mode") - (depends-on "scss-mode") - (depends-on "slim-mode") - (depends-on "systemd") - (depends-on "terraform-mode") - (depends-on "tuareg") - (depends-on "typescript-mode") - (depends-on "web-mode") - (depends-on "yaml-mode") - ) diff --git a/emacs.d/vendor/flycheck/Cask.24 b/emacs.d/vendor/flycheck/Cask.24 deleted file mode 100644 index dde8679..0000000 --- a/emacs.d/vendor/flycheck/Cask.24 +++ /dev/null @@ -1,59 +0,0 @@ -(source gnu) -(source melpa) - -(package-file "flycheck.el") - -(files "flycheck.el" "flycheck-ert.el" "flycheck-buttercup.el") - -(development - (depends-on "f") ; For some maintenance tools - (depends-on "buttercup") ; BDD test framework for Emacs - (depends-on "shut-up") ; Silence Emacs - - ;; Various modes for use in the unit tests - (depends-on "adoc-mode") - ;; (depends-on "bazel-mode") ; requires Emacs 26+ - (depends-on "coffee-mode") - (depends-on "cperl-mode") - (depends-on "cwl-mode") - ;; (depends-on "d-mode") ; requires Emacs 25.1+ - (depends-on "dockerfile-mode") - (depends-on "erlang") - ;; Latest ess requires `project' from Emacs 25+. - ;; (depends-on "ess") - (depends-on "geiser") - (depends-on "go-mode") - (depends-on "groovy-mode") - (depends-on "haml-mode") - (depends-on "handlebars-mode") - ;; (depends-on "haskell-mode") ; requires Emacs 25.1+ - (depends-on "js2-mode") - (depends-on "js3-mode") - (depends-on "rjsx-mode") - (depends-on "json-mode") - (depends-on "julia-mode") - (depends-on "less-css-mode") - (depends-on "lua-mode") - ;; (depends-on "markdown-mode") ; 25+ - (depends-on "mmm-mode") - ;; (depends-on "nix-mode") ; 25+ - (depends-on "php-mode") - (depends-on "processing-mode") - (depends-on "protobuf-mode") - (depends-on "pug-mode") - (depends-on "puppet-mode") - ;; (depends-on "racket-mode") ; requires Emacs 25.1+ - (depends-on "rhtml-mode") - (depends-on "rpm-spec-mode") - ;; (depends-on "rust-mode") ; 25+ - (depends-on "sass-mode") - (depends-on "scala-mode") - (depends-on "scss-mode") - (depends-on "slim-mode") - (depends-on "systemd") - (depends-on "terraform-mode") - (depends-on "tuareg") - (depends-on "typescript-mode") - (depends-on "web-mode") - (depends-on "yaml-mode") - ) diff --git a/emacs.d/vendor/flycheck/Cask.25 b/emacs.d/vendor/flycheck/Cask.25 deleted file mode 100644 index 31b78c0..0000000 --- a/emacs.d/vendor/flycheck/Cask.25 +++ /dev/null @@ -1,58 +0,0 @@ -(source gnu) -(source melpa) - -(package-file "flycheck.el") - -(files "flycheck.el" "flycheck-ert.el" "flycheck-buttercup.el") - -(development - (depends-on "f") ; For some maintenance tools - (depends-on "buttercup") ; BDD test framework for Emacs - (depends-on "shut-up") ; Silence Emacs - - ;; Various modes for use in the unit tests - (depends-on "adoc-mode") - ;; (depends-on "bazel-mode") ; requires Emacs 26+ - (depends-on "coffee-mode") - (depends-on "cperl-mode") - (depends-on "cwl-mode") - (depends-on "d-mode") - (depends-on "dockerfile-mode") - (depends-on "erlang") - (depends-on "ess") - (depends-on "geiser") - (depends-on "go-mode") - (depends-on "groovy-mode") - (depends-on "haml-mode") - (depends-on "handlebars-mode") - (depends-on "haskell-mode") - (depends-on "js2-mode") - (depends-on "js3-mode") - (depends-on "rjsx-mode") - (depends-on "json-mode") - (depends-on "julia-mode") - (depends-on "less-css-mode") - (depends-on "lua-mode") - (depends-on "markdown-mode") - (depends-on "mmm-mode") - (depends-on "nix-mode") - (depends-on "php-mode") - (depends-on "processing-mode") - (depends-on "protobuf-mode") - (depends-on "pug-mode") - (depends-on "puppet-mode") - ;; (depends-on "racket-mode") ;; https://github.com/greghendershott/racket-mode/issues/461 - (depends-on "rhtml-mode") - (depends-on "rpm-spec-mode") - (depends-on "rust-mode") - (depends-on "sass-mode") - (depends-on "scala-mode") - (depends-on "scss-mode") - (depends-on "slim-mode") - (depends-on "systemd") - (depends-on "terraform-mode") - (depends-on "tuareg") - (depends-on "typescript-mode") - (depends-on "web-mode") - (depends-on "yaml-mode") - ) diff --git a/emacs.d/vendor/flycheck/MAINTAINERS b/emacs.d/vendor/flycheck/MAINTAINERS deleted file mode 100644 index bda2378..0000000 --- a/emacs.d/vendor/flycheck/MAINTAINERS +++ /dev/null @@ -1,2 +0,0 @@ -Clément Pit-Claudel (@cpitclaudel) -fmdkdd (@fmdkdd) diff --git a/emacs.d/vendor/flycheck/Makefile b/emacs.d/vendor/flycheck/Makefile deleted file mode 100644 index 066b941..0000000 --- a/emacs.d/vendor/flycheck/Makefile +++ /dev/null @@ -1,164 +0,0 @@ -# Copyright (c) 2018 Flycheck contributors -# Copyright (c) 2012-2016 Sebastian Wiesner and Flycheck contributors - -# 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 3 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 . - -# Programs -CASK = cask -EMACS = emacs -GIT = git -INKSCAPE = inkscape -CONVERT = convert -OPTIPNG = optipng -# Program options -EMACSOPTS = -PATTERN = .* -LANGUAGE = -ifdef LANGUAGE -SELECTOR = (language $(LANGUAGE)) -endif - -# Internal variables -EMACSBATCH = $(EMACS) -Q --batch -L . $(EMACSOPTS) -RUNEMACS = - -# Program availability -ifdef CASK -RUNEMACS = $(CASK) exec $(EMACSBATCH) -HAVE_CASK := $(shell sh -c "command -v $(CASK)") -ifndef HAVE_CASK -$(warning "$(CASK) is not available. Please run make help") -endif -else -RUNEMACS = $(EMACSBATCH) -endif -HAVE_INKSCAPE := $(shell sh -c "command -v $(INKSCAPE)") -HAVE_CONVERT := $(shell sh -c "command -v $(CONVERT)") -HAVE_OPTIPNG := $(shell sh -c "command -v $(OPTIPNG)") - -RUNTEST = $(RUNEMACS) --load test/flycheck-test --load test/run.el \ - -f flycheck-run-tests-main - -# Export Emacs to goals, mainly for CASK -CASK_EMACS = $(EMACS) -export EMACS -export CASK_EMACS - -# Run make help by default -.DEFAULT_GOAL = help - -# File lists -SRCS = flycheck.el flycheck-ert.el -OBJS = $(SRCS:.el=.elc) -IMGS = doc/_static/logo.png -TEST_SRCS = flycheck.el flycheck-ert.el test/flycheck-test.el - -# File rules -flycheck-ert.elc: flycheck.elc - -flycheck-buttercup.elc: flycheck.elc - -$(OBJS): %.elc: %.el - $(RUNEMACS) -l maint/flycheck-compile.el -f flycheck/batch-byte-compile $< - -doc/_static/logo.png: flycheck.svg -ifndef HAVE_CONVERT - $(error "$(CONVERT) not available. Please run make help.") -endif -ifndef HAVE_INKSCAPE - $(error "$(INKSCAPE) not available. Please run make help.") -endif -ifndef HAVE_OPTIPNG - $(error "$(OPTIPNG) not available. Please run make help.") -endif - $(CONVERT) $< -trim -background white -bordercolor white \ - -border 5 $@ - $(OPTIPNG) $@ - -# Public targets -.PHONY: init -init: - $(CASK) --verbose install # --verbose is workaround for Emacs 25.3 - $(CASK) update - -.PHONY: clean -clean: - rm -rf $(OBJS) - $(MAKE) -C doc clean - -.PHONY: purge -purge: - $(GIT) clean -xfd - -.PHONY: format -format: - $(RUNEMACS) -l maint/flycheck-format.el -f flycheck/batch-format - -.PHONY: check-format -check-format: - $(RUNEMACS) -l maint/flycheck-format.el -f flycheck/batch-check-format - -.PHONY: checkdoc -checkdoc: - $(RUNEMACS) -l maint/flycheck-checkdoc.el -f flycheck/batch-checkdoc - -.PHONY: check -check: check-format checkdoc - -.PHONY: compile -compile: $(OBJS) - -.PHONY: specs -specs: compile - $(CASK) exec buttercup -L . --pattern '$(PATTERN)' test/specs - -.PHONY: unit -unit: compile - $(RUNTEST) '(and (not (tag external-tool)) $(SELECTOR))' - -.PHONY: integ -integ: compile - $(RUNTEST) '(and (tag external-tool) $(SELECTOR))' - -.PHONY: images -images: $(IMGS) - -.PHONY: help -help: - @echo 'Run `make init` first to install and update all local dependencies.' - @echo '' - @echo 'Available targets:' - @echo ' init: Initialise the project. RUN FIRST!' - @echo ' check: Check all Emacs Lisp sources (needs Emacs 25)' - @echo ' compile: Byte-compile Emacs Lisp sources' - @echo ' format: Format all Emacs Lisp sources' - @echo ' specs: Run all buttercup specs for Flycheck' - @echo ' unit: Run all ERT unit tests for Flycheck (legacy)' - @echo ' integ: Run all integration tests for Flycheck' - @echo ' images: Generate PNG images from SVG sources' - @echo ' clean: Clean compiled files' - @echo ' purge: Clean everything' - @echo '' - @echo 'Available make variables:' - @echo ' PATTERN: A regular expression matching spec names to run with `specs`' - @echo ' SELECTOR: An ERT selector expression for `unit` and `integ`' - @echo ' LANGUAGE: The name of a language for `integ`. Overrides `SELECTOR`' - @echo ' EMACSOPTS: Additional options to pass to `emacs`' - @echo ' EMACS: The path or name of the Emacs to use for tests and compilation' - @echo '' - @echo 'Available programs:' - @echo ' $(CASK): $(if $(HAVE_CASK),yes,no)' - @echo '' - @echo 'You need $(CASK) to develop Flycheck.' - @echo 'See http://cask.readthedocs.io/ for more information.' diff --git a/emacs.d/vendor/flycheck/README.md b/emacs.d/vendor/flycheck/README.md deleted file mode 100644 index 2387de8..0000000 --- a/emacs.d/vendor/flycheck/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# [![Flycheck][logo]](https://www.flycheck.org) # - -[![License GPL 3](https://img.shields.io/github/license/flycheck/flycheck.svg)][COPYING] -[![Join the chat](https://img.shields.io/gitter/room/flycheck/flycheck.svg)](https://gitter.im/flycheck/flycheck) -[![MELPA stable version](http://stable.melpa.org/packages/flycheck-badge.svg)](https://stable.melpa.org/#/flycheck) -[![Build Status](https://img.shields.io/travis/flycheck/flycheck/master.svg)](https://travis-ci.org/flycheck/flycheck) - - - -Modern on-the-fly syntax checking extension for GNU Emacs. [Try it][]! - -![](https://raw.githubusercontent.com/flycheck/flycheck/master/doc/images/flycheck-annotated.png) - -For a more gentle introduction read the [Installation][] instructions and go -through [Quickstart][] guide. - -Please ask questions about Flycheck on [Stack Exchange][sx] or in our -[Gitter chat][gitter], and report bugs to our [issue tracker][]. - -We welcome all kinds of contributions, whether you write patches, open pull -requests, write documentation, help others with Flycheck issues, or just tell -other people about your experiences with Flycheck. Please take a look at our -[Contributor’s Guide][contrib] for help and guidance about contributing to -Flycheck. - -We strive to create a safe, friendly and welcoming environment in the Flycheck -community and have a [Code of Conduct][coc] that defines acceptable and welcome -behaviour as well as sanctions for violations. All contributors and all -participants are expected to follow it, on Github, Gitter, Emacs.SX or any other -place that’s part of Flycheck’s broader community. - -Flycheck is free software: you can redistribute it and/or modify it under the -terms of the [GNU General Public License][copying] as published by the Free -Software Foundation, either version 3 of the License, or (at your option) any -later version. - -Flycheck 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][copying] for more -details. - -[COPYING]: https://github.com/flycheck/flycheck/blob/master/COPYING -[manual]: https://www.flycheck.org/en/latest/index.html#the-user-guide -[logo]: https://raw.githubusercontent.com/flycheck/flycheck/master/doc/_static/logo.png -[try it]: https://www.flycheck.org/en/latest/#try-out -[Installation]: https://www.flycheck.org/en/latest/user/installation.html -[Quickstart]: https://www.flycheck.org/en/latest/user/quickstart.html -[sx]: https://emacs.stackexchange.com/questions/tagged/flycheck -[gitter]: https://gitter.im/flycheck/flycheck -[Issue Tracker]: https://github.com/flycheck/flycheck/issues -[contrib]: https://www.flycheck.org/en/latest/contributor/contributing.html -[coc]: https://www.flycheck.org/en/latest/community/conduct.html diff --git a/emacs.d/vendor/flycheck/doc/.gitignore b/emacs.d/vendor/flycheck/doc/.gitignore deleted file mode 100644 index 6a97da3..0000000 --- a/emacs.d/vendor/flycheck/doc/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Sphinx build artifacts -/_build/ - -# Python bytecode of the in-tree Sphinx extensions -__pycache__/ \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/doc/COPYING.cc-by-sa b/emacs.d/vendor/flycheck/doc/COPYING.cc-by-sa deleted file mode 100644 index fd662a7..0000000 --- a/emacs.d/vendor/flycheck/doc/COPYING.cc-by-sa +++ /dev/null @@ -1,428 +0,0 @@ -Attribution-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-ShareAlike 4.0 International Public -License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-ShareAlike 4.0 International Public License ("Public -License"). To the extent this Public License may be interpreted as a -contract, You are granted the Licensed Rights in consideration of Your -acceptance of these terms and conditions, and the Licensor grants You -such rights in consideration of benefits the Licensor receives from -making the Licensed Material available under these terms and -conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. BY-SA Compatible License means a license listed at - creativecommons.org/compatiblelicenses, approved by Creative - Commons as essentially the equivalent of this Public License. - - d. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - e. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - f. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - g. License Elements means the license attributes listed in the name - of a Creative Commons Public License. The License Elements of this - Public License are Attribution and ShareAlike. - - h. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - i. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - j. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - k. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - l. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - m. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. Additional offer from the Licensor -- Adapted Material. - Every recipient of Adapted Material from You - automatically receives an offer from the Licensor to - exercise the Licensed Rights in the Adapted Material - under the conditions of the Adapter's License You apply. - - c. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - b. ShareAlike. - - In addition to the conditions in Section 3(a), if You Share - Adapted Material You produce, the following conditions also apply. - - 1. The Adapter's License You apply must be a Creative Commons - license with the same License Elements, this version or - later, or a BY-SA Compatible License. - - 2. You must include the text of, or the URI or hyperlink to, the - Adapter's License You apply. You may satisfy this condition - in any reasonable manner based on the medium, means, and - context in which You Share Adapted Material. - - 3. You may not offer or impose any additional or different terms - or conditions on, or apply any Effective Technological - Measures to, Adapted Material that restrict exercise of the - rights granted under the Adapter's License You apply. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material, - - including for purposes of Section 3(b); and - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public -licenses. Notwithstanding, Creative Commons may elect to apply one of -its public licenses to material it publishes and in those instances -will be considered the “Licensor.” The text of the Creative Commons -public licenses is dedicated to the public domain under the CC0 Public -Domain Dedication. Except for the limited purpose of indicating that -material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the -public licenses. - -Creative Commons may be contacted at creativecommons.org. - diff --git a/emacs.d/vendor/flycheck/doc/Makefile b/emacs.d/vendor/flycheck/doc/Makefile deleted file mode 100644 index a465ed0..0000000 --- a/emacs.d/vendor/flycheck/doc/Makefile +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors -# This file is not part of GNU Emacs. - -# 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 3 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 . - -PIP = pip3 -SPHINXOPTS = -j4 -SPHINXBUILD = sphinx-build -SPHINXAUTOBUILD = sphinx-autobuild -OPTIPNG = optipng -BUILDDIR = _build - -# Whether to build offline HTML that loads no external resources, for use in 3rd -# party packages, see https://github.com/flycheck/flycheck/issues/999 -OFFLINE = - -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(SPHINXOPTS) . -ifdef OFFLINE -ALLSPHINXOPTS += -Dflycheck_offline_html=1 -endif - -IMAGES = images/*.png - -.DEFAULT_GOAL := help - -HAVE_SPHINXBUILD := $(shell sh -c "command -v $(SPHINXBUILD)") -ifndef HAVE_SPHINXBUILD -$(warning "$(SPHINXBUILD) is not available. Please run make help.") -endif -HAVE_SPHINXAUTOBUILD := $(shell sh -c "command -v $(SPHINXAUTOBUILD)") -HAVE_PIP := $(shell sh -c "command -v $(PIP)") - -.PHONY: help -help: - @echo 'Available targets:' - @echo ' html: Build HTML documentation to $(BUILDDIR)/html' - @echo ' html-auto: Like html, but automatically rebuild on changes' - @echo ' linkcheck: Check all links and references' - @echo ' clean: Remove generated documentation' - @echo ' optimise-images: Optimise all images in the documentation' - @echo '' - @echo 'To build the documentation you need $(SPHINXBUILD).' - @echo 'For *-auto targets you also need $(SPHINXAUTOBUILD).' - @echo '' - @echo 'Available make variables:' - @echo ' OFFLINE: If set build HTML that loads no external resources' - @echo '' - @echo 'Available programs:' - @echo ' $(SPHINXBUILD): $(if $(HAVE_SPHINXBUILD),yes,no)' - @echo ' $(SPHINXAUTOBUILD): $(if $(HAVE_SPHINXAUTOBUILD),yes,no)' - @echo '' - @echo 'You need Python 3.4 or newer to install Sphinx for Flycheck.' - @echo '' - @echo 'Run make init to install all missing tools. It is recommended' - @echo 'that you use virtualenv (https://virtualenv.pypa.io/en/latest/)' - @echo 'to avoid a global installation of Python packages. make init' - @echo 'will warn you if you do not.' - -.PHONY: init -init: -ifndef HAVE_PIP - $(error "$(PIP) not available. Please run make help.") -endif -ifndef VIRTUAL_ENV - $(warning "No virtualenv active. Installing Sphinx globally is not recommended.") -ifndef FORCE - $(error "Aborted. Run make FORCE=1 init to override or make help.") -endif -endif - pip install -r requirements.txt - -.PHONY: clean -clean: - rm -rf $(BUILDDIR)/* - -# HTML and related formats -.PHONY: html -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -.PHONY: html-auto -html-auto: SPHINXOPTS = -B -html-auto: -ifndef HAVE_SPHINXAUTOBUILD - $(error "sphinx-autobuild not available. Run make help.") -endif - $(SPHINXAUTOBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - -# House-keeping targets -.PHONY: linkcheck -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -.PHONY: optimise-images -optimise-images: - $(OPTIPNG) $(filter %.png,$(IMAGES)) diff --git a/emacs.d/vendor/flycheck/doc/_static/favicon.ico b/emacs.d/vendor/flycheck/doc/_static/favicon.ico deleted file mode 100644 index ff29a2f71c081844733ffbcb73455e1c71f409c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5694 zcmeH~X;f8J6vzKe3Roavlo--L_N*`h6DW%zF|sIx3Mz&mP%|L`1+J*bB#;6oihw|% zA@d-U8YY4ag5mw(JT7%P56k7S9M^KU@4Gz1QmD21;_B`9?m7GJz5jRkopauO7tr93 zqa(Q0g~9~jFBH6S2#a`=;z}D1L~6+!2c?A4G&D4zsi_GqEiGtkYePpz2fDht(9_d{ zzP>&T3=CjsXb2-CBN!VS!^Fe{BS(&esi`T<%*Y_E|@%dGF)9<;pXNBcXxMqdV0dk%L_g}KJfMR zg`b}v{QdnA5DZi6h>ng% zOiT=7V`C8)7l(v|1SBRVA}J{e$;rt`Nl8I!YAVvw(vY5>j*N^9WM*b!<;s=F%F04^ zb~bWya*&&wi~Rh26c!euxVRW4B_${=Ek#*b87e9&P+eV(+S*#w)zzWCz8(z?4QOm^ zM00a9T3TAr+S-b?wl=i4x1+PO6J1?h=RYh^y$+$bLI@ro;{26=g;H9g$uZN@ggo=x`fM@FXPIU zE4X^~Dz06-h8s6-;O5PnxOM9mZr{F*d-v|~7!!{v@z@b2P9z=&!jvfl4-bO3H(}Z| z!kjt8{D|2R1c5Mb9x+40{P~213ki!B5#r;CSrQg6CM;b_%#N^Z88JJ;iWP)atBBbV z^74qe5efM$DDa(Lv0Xuzfo*TS89{p|_WqF=5v(!k#^Z0|$ut5)K_A z963TbdX$(mF=t}N#C(bQ63(3?=1a_#m@6?;!u9LKOo^EiGbLt9xO0ba_b!2m%fsrY4{!peFFR6UeJbXo#;#tWPQZab0@hvXxnxxy$pHmLyjsRma!H*DtP2Em=~O zp8wN|?2P=3q9v6{RY@KF@42g}H-G2q-}82??I>$4-`cd{*SgK?+t+m!?a14?y7%Xv zg6?(gl`S>DZD`tDyQQkLczZ$5rvCZ?d|$^2pUfB_KUnG|=?U}JU{#OKI}S1A1APAI zf<-ZwgGIW@! z)ok966@)A~JPt!ud8vQ1@2UKQ91P+=yHCrmXs09R3_J$VdyXFmn2jGlM;6&j5wJwmC*(;_+D~CUAXCK+9>&K1M0s7 z++N0TiQ2coWTima)C)0vI|J%phyL8Dz!zNmDd6*`zEqg^5A<{O@tPQ^k5{?&Gr(IZ zak6+{6bl5QM?SzfXg(|1{b|zg{yze|L~#uC=8EEUV4_kn0%JsRl^|?W>E%%wChtDL z?|B&Ut$Q#8PL66ZyYvr4bcZyUC@@BUpsLkkl)8l{gHxbp^dEuF_|D)mbQ zp;4uOVE*(!|9e1yRP+jTLb#hWRJu~*7p3#Z3qtvz`gasI%9^hfimxTd|BaE)SOvQ( zJ`lw?L0B`WUM_fOyGRgnRQe$^Wm7Jh@R@%7=ifuc99$>}%T;=rKQLAbDA&*Z6(^TG zq@6DaX>ypCOP~E4{idd-Hd#NN-}z*lCIx0l{wz7AZq)?T1k?o71paFRs-J9i|NkWL E2T|%$J^%m! diff --git a/emacs.d/vendor/flycheck/doc/_static/favicon.png b/emacs.d/vendor/flycheck/doc/_static/favicon.png deleted file mode 100644 index ccfff1e2e3c910c85ffbbd4278a056254b5c8fbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1546 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 diff --git a/emacs.d/vendor/flycheck/doc/_templates/about.html b/emacs.d/vendor/flycheck/doc/_templates/about.html deleted file mode 100644 index a0e5688..0000000 --- a/emacs.d/vendor/flycheck/doc/_templates/about.html +++ /dev/null @@ -1,43 +0,0 @@ -{% if theme_logo %} -

{{ project }}

- {% endif %} - -

-{% else %} -

{{ project }}

-{% endif %} - -{% if theme_description %} -

{{ theme_description }}

-{% endif %} - -{% macro badge(badge, href) -%} -

-{%- endmacro %} - -{% if theme_github_user and theme_github_repo and not flycheck_offline_html %} -{% if theme_github_button|lower == 'true' %} -

- -

-{% endif %} -{% endif %} - -{% if not flycheck_offline_html %} -

- - - -

-

- MELPA Stable -

-

- MELPA -

-{% endif %} diff --git a/emacs.d/vendor/flycheck/doc/_templates/layout.html b/emacs.d/vendor/flycheck/doc/_templates/layout.html deleted file mode 100644 index c267e13..0000000 --- a/emacs.d/vendor/flycheck/doc/_templates/layout.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "!layout.html" %} - -{% block extrahead %} - -{% endblock %} diff --git a/emacs.d/vendor/flycheck/doc/_templates/tables.html b/emacs.d/vendor/flycheck/doc/_templates/tables.html deleted file mode 100644 index 7600041..0000000 --- a/emacs.d/vendor/flycheck/doc/_templates/tables.html +++ /dev/null @@ -1,6 +0,0 @@ -

Tables

- diff --git a/emacs.d/vendor/flycheck/doc/changes.rst b/emacs.d/vendor/flycheck/doc/changes.rst deleted file mode 100644 index d19089f..0000000 --- a/emacs.d/vendor/flycheck/doc/changes.rst +++ /dev/null @@ -1,5 +0,0 @@ -========= - Changes -========= - -.. include:: ../CHANGES.rst diff --git a/emacs.d/vendor/flycheck/doc/community/conduct.rst b/emacs.d/vendor/flycheck/doc/community/conduct.rst deleted file mode 100644 index 80647cf..0000000 --- a/emacs.d/vendor/flycheck/doc/community/conduct.rst +++ /dev/null @@ -1,96 +0,0 @@ -.. _flycheck-conduct: - -========================== - Flycheck Code of Conduct -========================== - -Our Code of Conduct defines the social norms and policies within Flycheck’s -community. Whenever you interact with Flycheck or Flycheck developers, whether -in our official channels or privately, you’re expected to follow this Code of -Conduct. - -Conduct -======= - -**Contact**: :ref:`Any moderator ` - -* We are committed to providing a friendly, safe and welcoming environment for - all, regardless of level of experience, gender, gender identity and - expression, sexual orientation, disability, personal appearance, body size, - race, ethnicity, age, religion, nationality, or similar personal - characteristic. -* Please avoid using overtly sexual nicknames or other nicknames that might - detract from a friendly, safe and welcoming environment for all. -* Please be kind and courteous. There's no need to be mean or rude. -* Please do not curse or use bad words. Foul language will not help us to build - a great product. -* Respect that people have differences of opinion and that every design or - implementation choice carries a trade-off and numerous costs. There is seldom - a right answer. -* Please keep unstructured critique to a minimum. If you have solid ideas you - want to experiment with, make a fork and see how it works. -* We will exclude you from interaction if you insult, demean or harass - anyone. That is not welcome behaviour. We interpret the term "harassment" as - including the definition in the `Citizen Code of Conduct`_; if you have any - lack of clarity about what might be included in that concept, please read - their definition. In particular, we don't tolerate behavior that excludes - people in socially marginalized groups. -* Private harassment is also unacceptable. No matter who you are, if you feel - you have been or are being harassed or made uncomfortable by a community - member, please contact a :ref:`moderator ` - immediately. Whether you're a regular contributor or a newcomer, we care about - making this community a safe place for you and we've got your back. -* Likewise any spamming, trolling, flaming, baiting or other attention-stealing - behaviour is not welcome. - -.. _Citizen Code of Conduct: http://citizencodeofconduct.org/ - -Moderation -========== - -These are the policies for upholding our community's standards of conduct in our -communication channels, most notably in Flycheck’s Github organisation and in -Flycheck’s Gitter channels. - -1. Remarks that violate the Flycheck code of conduct, including hateful, - hurtful, oppressive, or exclusionary remarks, are not allowed. -2. Remarks that moderators find inappropriate, whether listed in the code of - conduct or not, are also not allowed. -3. Moderators will first respond to such remarks with a warning. -4. If the warning is unheeded, the user will be "kicked," i.e., kicked out of - the communication channel to cool off. -5. If the user comes back and continues to make trouble, they will be banned, - i.e., indefinitely excluded. -6. Moderators may choose at their discretion to un-ban the user if it was a - first offense and they offer the offended party a genuine apology. -7. If a moderator bans someone and you think it was unjustified, please take it - up with that moderator, or with a different moderator, **in - private**. Complaints about bans in-channel are not allowed. -8. Moderators are held to a higher standard than other community members. If a - moderator creates an inappropriate situation, they should expect less leeway - than others. - -In the Flycheck community we strive to go the extra step to look out for each -other. Don't just aim to be technically unimpeachable, try to be your best -self. In particular, avoid flirting with offensive or sensitive issues, -particularly if they're off-topic; this all too often leads to unnecessary -fights, hurt feelings, and damaged trust; worse, it can drive people away from -the community entirely. - -And if someone takes issue with something you said or did, resist the urge to be -defensive. Just stop doing what it was they complained about and apologize. Even -if you feel you were misinterpreted or unfairly accused, chances are good there -was something you could have communicated better — remember that it's your -responsibility to make your fellow Flycheck people comfortable. Everyone wants -to get along and we are all here first and foremost because we want to talk -about cool technology. You will find that people will be eager to assume good -intent and forgive as long as you earn their trust. - ---- - -Adapted from the `Rust Code of Conduct`_. - -| Copyright (c) 2015 Sebastian Wiesner and Flycheck contributors -| Copyright (c) 2014 The Rust Project Developers - -.. _Rust Code of Conduct: https://www.rust-lang.org/conduct.html diff --git a/emacs.d/vendor/flycheck/doc/community/extensions.rst b/emacs.d/vendor/flycheck/doc/community/extensions.rst deleted file mode 100644 index 14350fc..0000000 --- a/emacs.d/vendor/flycheck/doc/community/extensions.rst +++ /dev/null @@ -1,166 +0,0 @@ -.. _flycheck-extensions: - -======================== - Recommended extensions -======================== - -The Emacs community has produced a number of extensions to Flycheck. This page -lists all that we know of and can safely recommend to our users. - -*Official* extensions are (co-)maintained by the :ref:`Flycheck maintainers -` who will take care to update official extensions in case -of breaking changes in Flycheck and work to provide extra API for extensions if -needed. If you'd like to make your extension an *official* one and move it into -the `Flycheck Github organisation`_ please contact a :ref:`maintainer -`. - -If you do know extensions not in this list, or would like to see your own -extension here, please feel free to `add it`_. - -We would like to thank all people who created and contributed to Flycheck -extensions for their awesome work. Without your help and support Flycheck would -not be what it is today. - -.. _add it: https://github.com/flycheck/flycheck/edit/master/doc/community/extensions.rst -.. _Flycheck Github organisation: https://github.com/flycheck - -User interface -============== - -These extensions change Flycheck’s user interface: - -* :flyc:`flycheck-color-mode-line` (*official*) colors the mode line according - to the Flycheck status. -* :flyc:`flycheck-pos-tip` (*official*) shows Flycheck error messages in a - graphical popup. -* :gh:`liblit/flycheck-status-emoji` adds cute emoji (e.g. 😱 for errors) to - Flycheck’s mode line status. -* :gh:`Wilfred/flycheck-title` shows Flycheck error messages in the frame title. -* :flyc:`flycheck-inline` shows Flycheck error messages in the buffer, directly - below their origin. - -Language support -================ - -These extensions add support for new languages, or improve support for built-in -languages. They are grouped by the corresponding language so you can jump -directly to the languages that interest you: - -.. contents:: Languages - :local: - -Cadence -------- - -* :gh:`cmarqu/flycheck-hdl-irun` adds a syntax checker for hardware description - languages supported by `Cadence IES/irun`_. - -.. _Cadence IES/irun: https://www.cadence.com/content/cadence-www/global/en_US/home/tools/system-design-and-verification/simulation-and-testbench-verification/incisive-enterprise-simulator.html - -Clojure -------- - -* :gh:`clojure-emacs/squiggly-clojure` adds syntax checking for Clojure. - -C/C++/Objective C ------------------ - -* :gh:`Wilfred/flycheck-pkg-config` configures Flycheck to use settings from - `pkg-config`_ when checking C/C++. -* :gh:`Sarcasm/flycheck-irony` adds a Flycheck syntax checker for C, C++ and - Objective C using :gh:`Irony Mode `. - -.. _pkg-config: https://www.freedesktop.org/wiki/Software/pkg-config/ - -D -- - -* :flyc:`flycheck-d-unittest` (*official*) adds a Flycheck checker to run unit - tests for D programs on the fly. - -Elixir ------- - -* :gh:`tomekowal/flycheck-mix` adds an Elixir syntax checker using the ``mix`` - build tool. - -Emacs Lisp ----------- - -* :flyc:`flycheck-cask` (*official*) makes Flycheck use Cask packages for Emacs - Lisp syntax checking in Cask_ projects. -* :gh:`purcell/flycheck-package` checks Emacs Lisp packages for common problems - with package metadata. - -.. _Cask: https://github.com/cask/cask - -Julia ------ - -* :gh:`gdkrmr/flycheck-julia` makes linting for Julia_ available via Lint.jl_. - -.. _Julia: https://julialang.org -.. _Lint.jl: https://lintjl.readthedocs.io/en/stable/ - -Haskell -------- - -* :flyc:`flycheck-haskell` (*official*) configures Flycheck from the Cabal - settings and sandbox in Haskell projects. - -Ledger ------- - -* :gh:`purcell/flycheck-ledger` adds a syntax checker for the Ledger_ accounting - tool. - -.. _Ledger: https://ledger-cli.org/ - -Mercury -------- - -* :flyc:`flycheck-mercury` (*official*) adds a syntax checker for the Mercury_ - language. - -.. _Mercury: http://mercurylang.org/ - -OCaml ------ - -* :flyc:`flycheck-ocaml` (*official*) adds a syntax checker for OCaml using the - :gh:`Merlin ` backend. - -PHP ---- - -* :gh:`emacs-php/phpstan.el` adds a PHP static analyzer using PHPStan_. -* :gh:`emacs-php/psalm.el` adds a PHP static analyzer using Psalm_. - -.. _PHPStan: https://phpstan.org/ -.. _Psalm: https://psalm.dev/ - -Python ------- - -* :gh:`Wilfred/flycheck-pyflakes` adds a Python syntax checker using Pyflakes_. -* :gh:`msherry/flycheck-pycheckers` adds a checker for Python that can run multiple syntax checkers simultaneously (Pyflakes_, PEP8, Mypy_ 2/3, etc.). -* :gh:`chocoelho/flycheck-prospector` adds Prospector_ checker for Python syntax. - -.. _Pyflakes: https://github.com/PyCQA/pyflakes -.. _Prospector: https://github.com/PyCQA/prospector -.. _Mypy: http://mypy-lang.org/ - -Rust ----- - -* :flyc:`flycheck-rust` (*official*) configures Flycheck according to the Cargo - settings and layouts of the current Rust project. - -Shell scripts -------------- - -* :gh:`Gnouc/flycheck-checkbashisms` adds a shell script syntax checker using - ``checkbashisms`` which is part of `Debian devscripts`_ and checks for common - Bash constructs in POSIX shell scripts. - -.. _Debian devscripts: https://salsa.debian.org/debian/devscripts diff --git a/emacs.d/vendor/flycheck/doc/community/get-help.rst b/emacs.d/vendor/flycheck/doc/community/get-help.rst deleted file mode 100644 index 27ab1e8..0000000 --- a/emacs.d/vendor/flycheck/doc/community/get-help.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. _flycheck-get-help: - -========== - Get help -========== - -Please ask questions about Flycheck on `Stack Exchange`_ or in our `Gitter -chat`_. We try to answer all questions as fast and as precise as possible. - -To report bugs and problems please please use our :flyc:`issue tracker -`. Please note that we have a special policy for -:ref:`Windows-only issues `. - -Please follow our :ref:`Code of Conduct ` in all these places. - -.. _Stack Exchange: https://emacs.stackexchange.com/questions/tagged/flycheck -.. _Gitter chat: https://gitter.im/flycheck/flycheck diff --git a/emacs.d/vendor/flycheck/doc/community/people.rst b/emacs.d/vendor/flycheck/doc/community/people.rst deleted file mode 100644 index c06d1b9..0000000 --- a/emacs.d/vendor/flycheck/doc/community/people.rst +++ /dev/null @@ -1,293 +0,0 @@ -======== - People -======== - -.. _flycheck-teams: - -Teams -===== - -.. _flycheck-maintainers: - -Maintainers ------------ - -* **Clément Pit-Claudel** (:gh:`cpitclaudel`, owner) -* **fmdkdd** (:gh:`fmdkdd`, owner) - -We maintain Flycheck and all official extensions within the `Flycheck -organisation`_, and set the direction and scope of Flycheck. We review and -accept pull requests and feature proposals and fix bugs in Flycheck. - -Emphasized users are also owners of the `Flycheck Organisation`_, and thus have -administrative privileges for all repositories in Flycheck. Notably only owners -can currently make Flycheck releases, and their GPG keys sign release tags for -Flycheck. - -Mention with ``@flycheck/maintainers``. - -.. _Flycheck Organisation: https://github.com/flycheck - -.. _flycheck-moderators: - -Moderators ----------- - -Our moderators help uphold our :doc:`conduct`. Currently, we do not have a -dedicated moderation team; all our :ref:`flycheck-maintainers` also serve as -moderators in our Github organisation and in our official communication -channels. - -Mention with ``@flycheck/moderators``. - -.. note:: - - If you’d like to help out with moderation, please contact a maintainer. - -.. _flycheck-language-teams: - -Language teams --------------- - -These teams provide support for particular languages in Flycheck. - -Elixir -~~~~~~ - -* Aaron Jensen (:gh:`aaronjensen`) -* Kári Tristan Helgason (:gh:`kthelgason`) - -Mention with ``@flycheck/elixir``. - -Go -~~ - -* Dominik Honnef (:gh:`dominikh`) - -Mention with ``@flycheck/go``. - -Haskell -~~~~~~~ - -* Sergey Vinokurov (:gh:`sergv`) -* Steve Purcell (:gh:`purcell`) - -Mention with ``@flycheck/haskell``. - -Javascript -~~~~~~~~~~ - -* Saša Jovanić (:gh:`Simplify`) - -Mention with ``@flycheck/javascript``. - -Lua -~~~ - -* Gordon Gao (:gh:`ghprince`) - -Mention with ``@flycheck/lua``. - -Mercury -~~~~~~~ - -* Matthias Güdemann (:gh:`mgudemann`) - -Mention with ``@flycheck/mercury``. - -PHP -~~~ - -* USAMI Kenta (:gh:`zonuexe`) - -Mention with ``@flycheck/php``. - -Puppet -~~~~~~ - -* Romanos Skiadas (:gh:`rski`) - -Mention with ``@flycheck/puppet``. - -Ruby -~~~~ - -* Saša Jovanić (:gh:`Simplify`) - -Mention with ``@flycheck/javascript``. - -Rust -~~~~ - -* :gh:`fmdkdd` -* Michael Pankov (:gh:`mkpankov`) - -Mention with ``@flycheck/rust``. - -TypeScript -~~~~~~~~~~ - -* Saša Jovanić (:gh:`Simplify`) - -Mention with ``@flycheck/typescript``. - -Packagers -========= - -We would like to thank all people who package Flycheck on behalf of -distributions and support our development efforts with their feedback, their -patches and their testing: - -* Sean Whitton (:gh:`spwhitton`) and the `Debian Emacs addon team`_ (Debian - packages) - -.. _Debian Emacs addon team: https://pkg-emacsen.alioth.debian.org/ - -Acknowledgements -================ - -We would also like to thank the following people and projects: - -* Sebastian Wiesner (:gh:`lunaryorn`) for creating Flycheck in the first place, - for taking the time and dedication to maintain it for over 4 years, while - maintaining high standards of code quality and nurturing a healthy, active - community around it, giving Flycheck the best chances to thrive after his - departure. -* Bozhidar Batsov (:gh:`bbatsov`) for his valuable feedback and his constant - support and endorsement of Flycheck from the very beginning. Notably he added - Flycheck to his popular :gh:`Prelude ` project at a very - early stage and thus brought Flycheck to many new users. -* Magnar Sveen (:gh:`magnars`) for his :gh:`dash.el ` and - :gh:`s.el ` libraries, which support considerable parts of - Flycheck internals, and greatly helped to overcome Sebastian’s initial - aversion to Emacs Lisp. -* Martin Grenfell (:gh:`scrooloose`) for the Vim syntax checking extension - :gh:`Syntastic ` which saved Sebastian’s life back - when he was using Vim, and served as inspiration for Flycheck and many of its - syntax checkers. -* Matthias Güdemann (:gh:`mgudemann`), for his invaluable work on - Flycheck’s logo. -* Pavel Kobyakov for his work on GNU Flymake, which is a great work on - its own, despite its flaws and weaknesses. -* Simon Carter (:gh:`bbbscarter`), for his patient in-depth testing of automatic - syntax checking, and his very constructive feedback. -* Steve Purcell (:gh:`purcell`) for his valuable feedback, the fruitful - discussions and his important ideas about the shape and design of Flycheck, - and his indispensable and dedicated work on MELPA, which drives the continuous - distribution of Flycheck to its users. - -Contributors -============ - -The following people—listed in alphabetical order—contributed substantial code -to Flycheck: - -* Aaron Jensen (:gh:`aaronjensen`) -* Alain Kalker (:gh:`ackalker`) -* Alex Reed (:gh:`acr4`) -* Atila Neves (:gh:`atilaneves`) -* Ben Sless (:gh:`bsless`) -* Bozhidar Batsov (:gh:`bbatsov`) -* Clément Pit-Claudel (:gh:`cpitclaudel`, maintainer, owner) -* Colin Marquardt (:gh:`cmarqu`) -* Cristian Capdevila (:gh:`capdevc`) -* Damon Haley (:gh:`dhaley`) -* David Caldwell (:gh:`caldwell`) -* David Holm (:gh:`dholm`) -* DEADB17 (:gh:`DEADB17`) -* Deokhwan Kim (:gh:`dkim`) -* Derek Chen-Becker (:gh:`dchenbecker`) -* Derek Harland (:gh:`donkopotamus`) -* Dominik Honnef (:gh:`dominikh`) -* Doug MacEachern (:gh:`dougm`) -* Drew Wells (:gh:`drewwells`) -* Erik Hetzner (:gh:`egh`) -* Fanael Linithien (:gh:`Fanael`) -* :gh:`fmdkdd` (maintainer, owner) -* Fred Morcos (:gh:`fredmorcos`) -* Gereon Frey (:gh:`gfrey`) -* Gordon Gao (:gh:`ghprince`) -* Guido Kraemer (:gh:`gdkrmr`) -* Gulshan Singh (:gh:`gsingh93`) -* Iain Beeston (:gh:`iainbeeston`) -* Ibrahim Awwal (:gh:`ibrahima`) -* Jackson Ray Hamilton (:gh:`jacksonrayhamilton`) -* Jim Hester (:gh:`jimhester`) -* Jimmy Yuen Ho Wong (:gh:`wyuenho`) -* Joe DeVivo (:gh:`joedevivo`) -* John Shahid (:gh:`jvshahid`) -* Juergen Hoetzel (:gh:`juergenhoetzel`) -* Kári Tristan Helgason (:gh:`kthelgason`) -* Krzysztof Witkowski (:gh:`kwitek`) -* Lee Adams (:gh:`leeaustinadams`) -* Loïc Damien (:gh:`dzamlo`) -* Lorenzo Villani (:gh:`lvillani`) -* Łukasz Jędrzejewski (:gh:`jedrz`) -* Magnar Sveen (:gh:`magnars`) -* Malyshev Artem (:gh:`proofit404`) -* Manuel Uberti (:gh:`manuel-uberti`) -* Marc Sherry (:gh:`msherry`) -* Marcin Antczak (:gh:`marcinant`) -* Marcus Majewski (:gh:`hekto`) -* Marian Schubert (:gh:`maio`) -* Mario Rodas (:gh:`marsam`) -* Mark Laws (:gh:`drvink`) -* Mark Hellewell (:gh:`markhellewell`) -* Mark Karpov (:gh:`mrkkrp`) -* Martin Polden (:gh:`mpolden`) -* mats cronqvist (:gh:`massemanet`) -* Matthew Curry (:gh:`strawhatguy`) -* Matthias Dahl (:gh:`BinaryKhaos`) -* Michael Pankov (:gh:`mkpankov`) -* Michael Alan Dorman (:gh:`mdorman`) -* Miles Yucht (:gh:`mgyucht`) -* Miro Bezjak (:gh:`mbezjak`) -* Mitch Tishmack (:gh:`mitchty`) -* Moritz Bunkus (:gh:`mbunkus`) -* Omair Majid (:gh:`omajid`) -* :gh:`papaeye` -* Per Nordlöw (:gh:`nordlow`) -* Peter Eisentraut (:gh:`petere`) -* Peter Hoeg (:gh:`peterhoeg`) -* Peter Oliver (:gh:`mavit`) -* Peter Vasil (:gh:`ptrv`) -* Philipp Stephani (:gh:`phst`) -* Robert Dallas Gray (:gh:`rdallasgray`) -* Robert O'Connor (:gh:`robbyoconnor`) -* Robert Zaremba (:gh:`robert-zaremba`) -* Romano Skiadas (:gh:`rski`) -* Saša Jovanić (:gh:`Simplify`) -* Sean Gillespie (:gh:`swgillespie`) -* Sean Salmon (:gh:`phatcabbage`) -* Sean Whitton (:gh:`spwhitton`) -* Sebastian Beyer (:gh:`sebastianbeyer`) -* Sebastian Wiesner (:gh:`lunaryorn`, founder, former maintainer, former owner) -* Sebastian Schlueppel (:gh:`s3bs`) -* Sergey Vinokurov (:gh:`sergv`) -* Stephen Lewis (:gh:`stephenjlewis`) -* Steve Purcell (:gh:`purcell`) -* Sven Keidel (:gh:`svenkeidel`) -* Sylvain Benner (:gh:`syl20bnr`) -* Sylvain Rousseau (:gh:`thisirs`) -* Syohei Yoshida (:gh:`syohex`) -* Ted Zlatanov (:gh:`tzz`) -* Tom Jakubowski (:gh:`tomjakubowski`) -* Tom Willemse (:gh:`ryuslash`) -* Tomoya Tanjo (:gh:`tom-tan`) -* Troy Hinckley (:gh:`CeleritasCelery`) -* Usami Kenta (:gh:`zonuexe`) -* Victor Deryagin (:gh:`vderyagin`) -* Ville Skyttä (:gh:`scop`) -* Vlatko Basic (:gh:`vlatkoB`) -* Wieland Hoffmann (:gh:`mineo`) -* Wilfred Hughes (:gh:`Wilfred`) -* William Cummings (:gh:`wcummings`) -* William Xu (:gh:`xwl`) -* Yannick Roehlly (:gh:`yannick1974`) -* Yasuyuki Oka (:gh:`yasuyk`) -* Zhuo Yuan (:gh:`yzprofile`) - -For a complete list of all code contributors see the `Contributor Graph`_ or -``git shortlog --summary``. - -.. _Contributor Graph: https://github.com/flycheck/flycheck/graphs/contributors diff --git a/emacs.d/vendor/flycheck/doc/conf.py b/emacs.d/vendor/flycheck/doc/conf.py deleted file mode 100644 index c130f9a..0000000 --- a/emacs.d/vendor/flycheck/doc/conf.py +++ /dev/null @@ -1,302 +0,0 @@ -# Copyright (C) 2017, 2018 Flycheck contributors -# Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -# This file is not part of GNU Emacs. - -# 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 3 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 . - -import re -import sys -import os -from pathlib import Path -from docutils import nodes -from docutils.statemachine import ViewList -from docutils.transforms import Transform -from docutils.parsers.rst import Directive, directives -from sphinx import addnodes -from sphinx.util.nodes import set_source_info, process_index_entry -from sphinx.util import logging - -logger = logging.getLogger(__name__) - -sys.path.append(str(Path(__file__).parent)) - -ON_RTD = os.environ.get('READTHEDOCS', None) == 'True' - -needs_sphinx = '1.3' -extensions = [ - 'sphinx.ext.intersphinx', - 'sphinx.ext.extlinks', - 'sphinx.ext.todo', - # Domain for Emacs Lisp - 'elisp', - # Cross-references to info nodes - 'info' -] - -# Project metadata -project = 'Flycheck' -copyright = ' 2014-2017, Sebastian Wiesner and Flycheck contributors' -author = 'Sebastian Wiesner' - - -def read_version(): - """Extract version number from ``flycheck.el`` and return it as string.""" - version_pattern = re.compile(r'^;;\s*Version:\s+(\d.+)$', re.MULTILINE) - flycheck = Path(__file__).resolve().parent.parent.joinpath('flycheck.el') - with flycheck.open(encoding='utf-8') as source: - match = version_pattern.search(source.read()) - if match: - return match.group(1) - else: - raise ValueError('Failed to parse Flycheck version from ' - 'Version: of flycheck.el') - - -def read_minimum_emacs_version(): - """Extract minimum Emacs version from ``flycheck.el``.""" - version_pattern = re.compile( - r'^;; Package-Requires:.*\(emacs\s*"([^"]+)"\).*$', re.MULTILINE) - flycheck = Path(__file__).resolve().parent.parent.joinpath('flycheck.el') - with flycheck.open(encoding='utf-8') as source: - match = version_pattern.search(source.read()) - if match: - return match.group(1) - else: - raise ValueError('Vailed to parse minimum Emacs version from ' - 'Package-Requires of flycheck.el!') - - -release = read_version() -version = '.'.join(release.split('.')[:2]) - -# Source settings -source_suffix = '.rst' -master_doc = 'index' - -rst_prolog = """\ -.. role:: elisp(code) - :language: elisp - -.. |min-emacs| replace:: {emacs_version}+ -""".format(emacs_version=read_minimum_emacs_version()) - -# Build settings -exclude_patterns = ['_build'] -default_role = 'any' -primary_domain = 'el' -templates_path = ['_templates'] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# Warn about all undefined references, but exclude references to built-in -# symbols which we don't document here. -# TODO: Resolve built-in symbols to the Emacs Lisp references? -nitpicky = True -nitpick_ignore = [ - ('any', 'default-directory'), - ('any', 'package-initialize'), - ('any', 'package-archives'), - ('any', 'user-init-file'), - ('any', 'user-emacs-directory'), - ('any', 'check-declare-file'), - ('any', 'declare-function'), - ('any', 'exec-path'), - ('any', 'sh-shell'), - ('any', 'rx'), -] - -# HTML settings -html_theme = 'alabaster' -html_theme_options = { - 'logo': 'logo.png', - 'logo_name': False, - 'description': 'Syntax checking for GNU Emacs', - 'github_user': 'flycheck', - 'github_repo': 'flycheck', - 'github_type': 'star', - 'github_banner': True, - 'travis_button': False, -} -html_sidebars = { - '**': [ - 'about.html', - 'tables.html', - 'navigation.html', - 'relations.html', - 'searchbox.html', - ] -} -html_static_path = ['_static'] -html_favicon = '_static/favicon.ico' - -# Ignore localhost when checking links -linkcheck_ignore = [r'http://localhost:\d+/?'] - -# Cross-reference remote Sphinx sites -intersphinx_mapping = { - 'python': ('https://docs.python.org/3.5', None) -} - -extlinks = { - 'gh': ('https://github.com/%s', ''), - 'flyc': ('https://github.com/flycheck/%s', '') -} - -# While still have work to do :) -# FIXME: Remove when the old Texinfo manual is completed ported -todo_include_todos = True - - -class SupportedLanguage(Directive): - - required_arguments = 1 - final_argument_whitespace = True - has_content = True - option_spec = { - 'index_as': directives.unchanged - } - - def run(self): - language = self.arguments[0] - - indexed_languages = self.options.get('index_as') or language - index_specs = ['pair: {}; language'.format(lang) - for lang in indexed_languages.splitlines()] - - name = nodes.fully_normalize_name(language) - target = 'language-{}'.format(name) - targetnode = nodes.target('', '', ids=[target]) - self.state.document.note_explicit_target(targetnode) - - indexnode = addnodes.index() - indexnode['entries'] = [] - indexnode['inline'] = False - set_source_info(self, indexnode) - for spec in index_specs: - indexnode['entries'].extend(process_index_entry(spec, target)) - - sectionnode = nodes.section() - sectionnode['names'].append(name) - - title, messages = self.state.inline_text(language, self.lineno) - titlenode = nodes.title(language, '', *title) - - sectionnode += titlenode - sectionnode += messages - self.state.document.note_implicit_target(sectionnode, sectionnode) - - self.state.nested_parse(self.content, self.content_offset, sectionnode) - - return [indexnode, targetnode, sectionnode] - - -class SyntaxCheckerConfigurationFile(Directive): - - required_arguments = 1 - final_argument_whitespace = True - - def run(self): - option = self.arguments[0] - - wrapper = nodes.paragraph() - docname = self.state.document.settings.env.docname - template = ViewList("""\ -.. index:: single: Configuration file; {0} - -.. el:defcustom:: {0} - - Configuration file for this syntax checker. See - :ref:`flycheck-checker-config-files`. -""".format(option).splitlines(), docname) - self.state.nested_parse(template, self.content_offset, wrapper) - - return wrapper.children.copy() - - -class IssueReferences(Transform): - - ISSUE_PATTERN = re.compile(r'\[GH-(\d+)\]') - ISSUE_URL_TEMPLATE = 'https://github.com/flycheck/flycheck/issues/{}' - - default_priority = 999 - - def apply(self): - docname = self.document.settings.env.docname - if docname != 'changes': - # Only transform issue references in changelo - return - - for node in self.document.traverse(nodes.Text): - parent = node.parent - new_nodes = [] - last_issue_ref_end = 0 - text = str(node) - for match in self.ISSUE_PATTERN.finditer(text): - # Extract the text between the last issue reference and the - # current issue reference and put it into a new text node - head = text[last_issue_ref_end:match.start()] - if head: - new_nodes.append(nodes.Text(head)) - # Adjust the position of the last issue reference in the - # text - last_issue_ref_end = match.end() - # Extract the issue text and the issue number - issuetext = match.group(0) - issue_id = match.group(1) - # Turn the issue into a proper reference - refnode = nodes.reference() - refnode['refuri'] = self.ISSUE_URL_TEMPLATE.format(issue_id) - refnode.append(nodes.inline( - issuetext, issuetext, classes=['xref', 'issue'])) - new_nodes.append(refnode) - - # No issue references were found, move on to the next node - if not new_nodes: - continue - # Extract the remaining text after the last issue reference - tail = text[last_issue_ref_end:] - if tail: - new_nodes.append(nodes.Text(tail)) - parent.replace(node, new_nodes) - - -def build_offline_html(app): - from sphinx.builders.html import StandaloneHTMLBuilder - build_standalone = isinstance(app.builder, StandaloneHTMLBuilder) - if app.config.flycheck_offline_html and build_standalone: - logger.info( - 'Building offline documentation without external resources!') - app.builder.theme_options['github_banner'] = 'false' - app.builder.theme_options['github_button'] = 'false' - - -def add_offline_to_context(app, _pagename, _templatename, context, _doctree): - # Expose offline setting in HTML context - context['flycheck_offline_html'] = app.config.flycheck_offline_html - - -def setup(app): - app.add_object_type('syntax-checker', 'checker', - 'pair: %s; Syntax checker') - app.add_directive('supported-language', SupportedLanguage) - app.add_directive('syntax-checker-config-file', - SyntaxCheckerConfigurationFile) - app.add_transform(IssueReferences) - # Build offline HTML that loads no external resources, for use in 3rd party - # packages, see https://github.com/flycheck/flycheck/issues/999 - app.add_config_value('flycheck_offline_html', False, 'html') - app.connect('builder-inited', build_offline_html) - app.connect('html-page-context', add_offline_to_context) diff --git a/emacs.d/vendor/flycheck/doc/contributor/contributing.rst b/emacs.d/vendor/flycheck/doc/contributor/contributing.rst deleted file mode 100644 index e805d04..0000000 --- a/emacs.d/vendor/flycheck/doc/contributor/contributing.rst +++ /dev/null @@ -1,274 +0,0 @@ -.. _flycheck-contributors-guide: - -===================== - Contributor’s Guide -===================== - -Thank you very much for your interest in contributing to Flycheck! We’d like to -warmly welcome you in the Flycheck community, and hope that you enjoy your time -with us! - -There are many ways to contribute to Flycheck, and we appreciate all of them. We -hope that this document helps you to contribute. If you have questions, please -ask on our `issue tracker`_ or in our `Gitter chatroom`_. - -For a gentle start please take a look at all the things we `need your help -with`_ and look for `beginner-friendly tasks`_. - -Please note that all contributors are expected to follow our :ref:`Code of -Conduct `. - -.. _issue tracker: https://github.com/flycheck/flycheck/issues -.. _Gitter chatroom: https://gitter.im/flycheck/flycheck -.. _need your help with: https://github.com/flycheck/flycheck/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+help%22 -.. _beginner-friendly tasks: https://github.com/flycheck/flycheck/labels/beginner%20friendly - -.. _flycheck-bug-reports: - -Bug reports -=========== - -Bugs are a sad reality in software, but we strive to have as few as possible in -Flycheck. Please liberally report any bugs you find. If you are not sure whether -something is a bug or not, please report anyway. - -If you have the chance and time please `search existing issues`_, as it’s -possible that someone else already reported your issue. Of course, this doesn’t -always work, and sometimes it’s very hard to know what to search for, so this is -absolutely optional. We definitely don’t mind duplicates, please report -liberally. - -To open an issue simply fill out the `issue form`_. To help us fix the issue, -include as much information as possible. When in doubt, better include too much -than too little. Here’s a list of facts that are important: - -* What you did, and what you expected to happen instead -* Whether and how you were able to `reproduce the issue in emacs -Q`_ -* Your Flycheck setup from ``M-x flycheck-verify-setup`` - -.. _search existing issues: https://github.com/flycheck/flycheck/issues?q=is%3Aissue -.. _issue form: https://github.com/flycheck/flycheck/issues/new -.. _reproduce the issue in emacs -Q: https://emacs.stackexchange.com/questions/28429/how-do-i-troubleshoot-emacs-problems - - -.. _flycheck-windows-issues: - -Windows-only issues -------------------- - -As Flycheck does not support Windows officially we generally do *not* attempt to -fix issues that only occur on Windows. We will move all Windows-only issues to -the `list of open Windows issues`_, and leave them to Windows users and -developers. - -We welcome anyone who wants to fix open Windows issues, and we will merge pull -requests for improved Windows compatibility. If you know Windows and Emacs, -please take a look at the list of open Windows issues and try to fix any of -these. - -.. _list of open Windows issues: https://github.com/flycheck/flycheck/labels/arch%3A%20windows%20only - -Feature requests -================ - -To request a new feature please open a new issue through our `issue form`_. -A feature request needs to find a core developer or maintainer who adopts and -implements it. - -The build system -================ - -Flycheck provides a :file:`Makefile` with some convenient targets to compile and -test Flycheck. The Makefile requires Cask_, the Emacs Lisp dependency manager. -Run ``make help`` to see a list of all available targets. Some common ones are: - -- ``make init`` initialises the project by installing local Emacs Lisp - dependencies. -- ``make check`` checks all Emacs Lisp sources. This target requires Emacs 25. -- ``make compile`` compiles Flycheck and its libraries to byte code. -- ``make format`` formats all Emacs Lisp sources. -- ``make specs`` runs all Buttercup_ specs for Flycheck. Set :makevar:`PATTERN` - to run only specs matching a specific regular expression, e.g. ``make - PATTERN='^Mode Line' specs`` to run only tests for the mode line. -- ``make unit`` runs all ERT unit tests for Flycheck. We are phasing ERT out in - favour of Buttercup; no new ERT unit tests will be added and this target will - eventually be removed. -- ``make integ`` runs all integration tests for Flycheck syntax checkers. These - tests are dependent on the checker programs and their versions; expect - failures when running this target with bleeding-edge checkers. Set - :makevar:`SELECTOR` to run only tests matching a specific ERT selector, - e.g. ``make SELECTOR='(language haskell)' integ`` to run only integration - tests for Haskell. ``make LANGUAGE=haskell integ`` is a shortcut for this. - - If you want to replicate the integration tests that are run on the CI, - continue reading. - -.. _Cask: http://cask.readthedocs.io/ -.. _Buttercup: https://github.com/jorgenschaefer/emacs-buttercup - -Running all the integration tests -================================= - -To run all the integration tests, you need to have all the syntax checkers -installed. As that can be tedious work, and since your locally installed tools -can have different versions than the tools used on the CI, we have created a -Docker image with most of the supported checkers. To use the Docker image -locally and replicate the integration tests that are run on the CI, first you -need to build the image:: - - cd flycheck - docker pull flycheck/emacs-cask:26.2 - docker pull flycheck/all-tools:latest - docker build --build-arg EMACS_VERSION=26.2 --tag tools-and-emacs:26.2 -f .travis/tools-and-emacs . - -Replace ``26.2`` by the Emacs version you want to test. See the available -versions on `docker hub`_. - -Once the image is built, you can use it to run the integration tests:: - - docker run --rm -it -v `pwd`:/flycheck --workdir /flycheck tools-and-emacs:26.2 /bin/bash -c "make integ" - -Note that the ``all-tools`` image is rebuilt each month, so the versions of the -its syntax checkers will change accordingly. You can check the version of each -installed tool by running the ``check-tools`` script in the image:: - - docker run --rm -it -v `pwd`:/flycheck --workdir /flycheck tools-and-emacs:26.2 check-tools - -.. _docker hub: https://hub.docker.com/r/flycheck/emacs-cask/tags - -Pull requests -============= - -Pull Requests are the primary mechanism to submit your own changes to -Flycheck. Github provides great documentation about `Pull Requests`_. - -.. _Pull Requests: https://help.github.com/articles/using-pull-requests/ - -Please make your pull requests against the ``master`` branch. - -Use ``make check specs unit`` to test your pull request locally. When making -changes to syntax checkers of a specific language, it’s also a good idea to run -:samp:`make LANGUAGE={language} integ` and check whether the tests for the -particular language still work. A successful ``make integ`` is by no means -mandatory for pull requests, though, the continuous integration will test your -changes, too. - -.. important:: - - To contribute to Flycheck you must sign our CLA_ (Contributor License - Agreement). The CLA Assistant bot will automatically ask you to do this when - you open a pull request, and will let you sign the CLA through your Github - account. - - We require this process mostly to make you aware of the licensing - implications of contributing to Flycheck and to obtain your explicit approval - of our licenses for your contribution. - - .. _CLA: https://gist.github.com/lunaryorn/c9c0d656fe7e704da2f734779242ec99 - -All pull requests go through a two-stage review process: - -* :ref:`Maintainer ` review the general idea and direction - of the pull request and leave a ``LGTM`` comment if they believe that the - change is a good addition to Flycheck. We currently require at least one - approval from a maintainer. -* :ref:`All contributors `—language teams in - particular—check the technical implementation of a pull request through `pull - request reviews`_, and either approve it or request changes. We currently - require at least one approval and no requested changes. - -.. important:: - - We have a comprehensive :ref:`flycheck-style-guide` that explains what - features we will accept, how our code should look likewise, what tests we - require, how commit messages should look like, and so on. - - Take a look at it to see what we look for in a code review. - -Additionally all pull requests go through automated tests on `Travis CI`_ which -check code style, run unit tests, etc - -Feel free to mention individual contributors or entire teams -(e.g. ``@flycheck/maintainers`` or ``@flycheck/javascript``) to ask for help or -feedback or request a review. Please mention the maintainers -(``@flycheck/maintainers``) if you think that your pull request has been waiting -for review too long. You can expect a first response to any pull request in a -couple of days. - -Once the pull request passed review and automated tests we will merge it. We -may also ask you whether you'd like to join Flycheck and help us, thus giving -you commit access to our repository and let you merge your own pull request. - -.. _pull request reviews: https://help.github.com/articles/about-pull-request-reviews/ -.. _Travis CI: https://travis-ci.org/flycheck/flycheck/pull_requests - -Writing documentation -===================== - -Documentation improvements are very welcome. Flycheck’s manual is written in -reStructuredText_ and built with Sphinx_. The source of the manual resides in -the ``doc/`` directory. - -You need Python 3.4 or newer to install Sphinx_ for Flycheck’s documentation. -On macOS it is recommended that you use Homebrew_ to install the latest Python -version with ``brew install python3``. On Linux you should be able to obtain -Python 3.4 from the package manager of your distribution. - -With Python 3 installed change into the ``doc/`` directory and run ``make init`` -to install Sphinx and related tools required for Flycheck’s documentation. We -recommend that you use virtualenv_ to avoid a global installation of Python -modules. ``make init`` will warn you if you do not. - -When editing documentation run ``make html-auto`` to view the results of your -edits. This target runs a local webserver at http://localhost:8000 which serves -the HTML documentation and watches the documentation sources for changes to -rebuild automatically. When you have finished your edits it is a good idea to -run ``make linkcheck`` to verify all links in the documentation. Note that this -target can take a while especially when run on a clean build. - -Run ``make help`` to see a list of all available Make targets for the -documentation. - -Documentation pull requests work in the same way as other pull requests. To -find documentation issues sort by the `documentation`_ label. - -.. _ReStructuredText: http://docutils.sourceforge.net/rst.html -.. _Sphinx: http://www.sphinx-doc.org -.. _Homebrew: https://brew.sh -.. _virtualenv: https://virtualenv.pypa.io/en/latest/ -.. _documentation: https://github.com/flycheck/flycheck/labels/documentation - -Issue management -================ - -We use Github labels for basic issue management: - -- **The red “bug” label denotes critical bugs in Flycheck that must be fixed - urgently.** -- Violet labels describe the area of Flycheck the issue belongs to. -- The green “beginner friendly” label denotes easy tasks for newcomers to the - project. -- Orange labels denote blockers. -- Grey labels indicate resolutions to issues. - -Out of tree contributions -========================= - -There are many ways that you can contribute to Flycheck that go beyond -this repository. - -Answer questions in our `Gitter channel`_ or on StackExchange_. - -Participate in Flycheck discussions in other Emacs communities and help -users with troubles. - -Write :ref:`extensions for Flycheck `. - -.. _Gitter channel: https://gitter.im/flycheck/flycheck -.. _StackExchange: https://emacs.stackexchange.com/questions/tagged/flycheck - --------------- - -This contributing guide is heavily inspired by `Rust’s excellent -contributing -information `__. diff --git a/emacs.d/vendor/flycheck/doc/contributor/maintaining.rst b/emacs.d/vendor/flycheck/doc/contributor/maintaining.rst deleted file mode 100644 index 2fe328f..0000000 --- a/emacs.d/vendor/flycheck/doc/contributor/maintaining.rst +++ /dev/null @@ -1,306 +0,0 @@ -.. _flycheck-maintainers-guide: - -==================== - Maintainer’s Guide -==================== - -Issue triage -============ - -Please label incoming tickets accordingly according to these rules: - -- Add the “bug” label to things that you think **must be fixed urgently**. - Please don’t use this label for bugs that do not severely impede Flycheck’s - functionality. -- Add the “needs review” label to new bugs and pull requests that need to be - reviewed. -- Add the “beginner friendly” label to really easy things. If you add this - label please also add a comment that outlines a possible solution. -- Add “blocked” to bugs that need further comment or help from the reporter, and - to pull requests that need to be improved. -- Add “needs help” to anything that no contributor will work on, to mark the - issue as available for external contributors and inform users that we will not - work on the issue. -- Add “windows only” for bugs that appear to only affect Windows operating - systems. - -**If you’d like to review a bug or pull request please assign the corresponding -ticket to you.** - -In issues for specific languages that Flycheck support please mention the -corresponding :ref:`language team ` if one exists. - -Git workflow -============ - -Our Git workflow is simple: - -* The ``master`` branch is always shippable. -* Every feature and every non-trivial change goes through a pull request. - -GitHub calls this the “GitHub Flow” and has a very nice `visual guide`_ for this -model. - -.. _visual guide: https://guides.github.com/introduction/flow/ - -.. _flycheck-branch-rules: - -Branch rules ------------- - -Our workflow implies a couple of rules about which branches to push code to: - -* Please commit new features, larger changes and refactorings and updates to - documentation to separate branches and open a pull request for review and - discussion. -* The ``master`` branch is protected. Only :ref:`owners ` - can push directly to it. Everyone else needs to open a pull request. Github - requires maintainer approval and passing Travis CI tests before a pull request - can be merged to master. - -.. important:: - - When creating a new branch please use a *descriptive name* to communicate the - purpose of the branch to other developers and maintainers. ``fix-bug-42`` is - not a great name, but ``42-fix-void-function-error-in-error-list`` is. - -.. _pull request: https://help.github.com/articles/using-pull-requests/ - -.. _flycheck-pull-requests-reviews: - -Pull requests reviews ---------------------- - -We review all pull requests, and require two different kinds of approval: - -* At least one maintainer must approve the idea and direction with a ``LGTM`` - comment. -* At least one contributor (maintainer or otherwise) must approve the - implementation by leaving an approved `pull request review`_, and no - contributors must have requested changes. - -.. _pull request review: https://help.github.com/articles/about-pull-request-reviews/ - -As a maintainer -~~~~~~~~~~~~~~~ - -* Consider whether you personally think that the change is a good addition to - Flycheck. -* Weight the expected benefits and impact of the feature against the - expected complexity. -* Check whether the pull request complies with our :ref:`style guide - `, but don't go too much into technical details. -* Don't review for technical details. It's the idea and direction that counts. - -If you would like to see the pull request in Flycheck leave a ``LGTM`` comment. - -As a contributor -~~~~~~~~~~~~~~~~ - -* Check the technical implementation. -* Consider the impact on syntax checking for a language. -* Check whether the tests pass. -* Check whether the PR complies with our :ref:`style guide - `. -* Challenge the technical implementation of a pull request, and ask questions - about dubious code. -* Consider whether there might be a simpler approach or a better solution to the - problem that the PR solves. - -If you find any issues please leave a `pull request review`_ that requests -for changes. Please try to leave an inline comment wherever possible and try to -suggest a better solution, to make it easy for the PR author to discover and fix -the issues. - -If you didn't find any issues leave a `pull request review`_ that approves the -changes. - -In doubt request changes first and let the PR author explain their intention and -implementation. You can still approve the review afterwards if you are -satisfied. - -Merge guidelines -~~~~~~~~~~~~~~~~ - -Any contributor may merge approved pull requests. Our protection rules for the -``master`` branch ensure that only approved pull requests can be merged, but you -still have to check a few things before merging: - -* Are commits squashed? Before merging please take an extra look at the commits - to make sure that the commits were properly squashed and have good commit - messages. If needed, ask the contributor to improve the commit messages and - squash the commits first, by requesting changes with a pull request review. -* Does the PR pass the integration tests? Not all checkers have integration - tests, and not all tests are run on CI, so contributors should make sure to - run them on their side. -* Should the PR warrant a line in the changelog? User-facing changes should be - documented in ``CHANGES.rst``. - -For new features: - -* Does the PR include tests? A new syntax checker should have at least one - accompanying integration test. -* Does the PR include documentation? New syntax checkers or options should be - documented in :ref:`flycheck-languages`. - -If all the points above have been addressed, then go ahead and click that green -button :) - -.. note:: - - We require proper merges for pull requests, to preserve the fact that a - change came from a pull request in the git history and to retain any commit - signatures that may exist. As such you can't squash-merge or rebase-merge - through GitHub's UI. - -.. _flycheck-git-signatures: - -Signatures for commits and tags -------------------------------- - -We sign all release tags as part of our :ref:`flycheck-release-process`. Thus -you need a GPG key pair for Git. Github provides a great guide which helps you -to `generate a key`_ and to `tell Git about your key`_. Please also `add your -key`_ to your Github account. - -We also recommend that you sign all your commits with your key. Again, Github -provides a good guide to `sign commits`_. - -.. seealso:: - - `Signing Your Work`_ - For more information about signing commits and tags take a look at the - section in the Git manual. - -.. _Signing Your Work: https://git-scm.com/book/uz/v2/Git-Tools-Signing-Your-Work -.. _generate a key: https://help.github.com/articles/generating-a-gpg-key/ -.. _tell Git about your key: https://help.github.com/articles/telling-git-about-your-gpg-key/ -.. _add your key: https://help.github.com/articles/adding-a-new-gpg-key-to-your-github-account/ -.. _sign commits: https://help.github.com/articles/signing-commits-using-gpg/ - -Tooling and Services -==================== - -In addition to Github_ where we host code and do code reviews we use a bit of -extra tooling and some 3rd party services for Flycheck: - -* ReadTheDocs_ hosts http://www.flycheck.org and automatically rebuilds it on - every change. It works mostly automatically and requires little - configuration. -* `Travis CI`_ runs our tests after every push and for every pull request. - It's configured through ``.travis.yml``. -* `CLA assistant`_ checks signatures to our CLA_ and allows contributors to sign - the CLA through their Github account. - -All :ref:`maintainers ` have administrative access to -these services so in case of an issue just contact them. - -.. _Github: https://github.com/flycheck -.. _ReadTheDocs: https://readthedocs.org/projects/flycheck/ -.. _Travis CI: https://travis-ci.org/flycheck/flycheck -.. _CLA assistant: https://cla-assistant.io -.. _CLA: https://gist.github.com/lunaryorn/c9c0d656fe7e704da2f734779242ec99 - -.. _flycheck-maintenance-scripts: - -Maintenance scripts -=================== - -Administrative processes are tedious and time-consuming, so we try to automate -as much as possible. The :file:`maint/` directory contains many scripts for -this purpose. ``make -C maint/ help`` provides an overview over all -administrative tasks. - -Most of these scripts require Python 3.5 and additional Python libraries. On OS -X it is recommended that you use Homebrew_ to install the latest Python version -with ``brew install python3``. On Linux you should be able to obtain Python 3.5 -from the package manager of your distribution. - -To install all required libraries run ``make -C maint init``. We recommend that -you use virtualenv_ to avoid a global installation of Python modules. ``make -init`` will warn you if you do not. - -.. _Homebrew: https://brew.sh -.. _virtualenv: https://virtualenv.pypa.io/en/latest/ - -Versioning and releases -======================= - -We use a single continuously increasing version number for Flycheck. - -.. important:: - - Breaking changes may occur **at any point**. - -Please feel free to make a release whenever you think it’s appropriate. -It’s generally a good idea to release when - -- you fixed an important bug that affects many users, -- there are a couple of new syntax checkers available, -- there’s a major new feature in ``master``, -- etc. - -In doubt just make a release. We aim to release early and frequently. If -anything breaks anything we can just publish another release afterwards. - -.. _flycheck-release-process: - -Release process ---------------- - -First, check that - -1. you are on ``master``, -2. your working directory is clean, i.e. has no uncommitted changes or untracked - files, -3. all commits are pushed, -4. and Travis CI passes for the latest commit on ``master``. - -If all is good a new release is a simple as - -.. code-block:: console - - $ make -C maint release - -This runs the release script in :file:`maint/release.py`. If any of the above -requirements isn't met the release script will signal an error and abort. - -The release script bumps the version number, commits and tags a new release, and -pushes it to Github. - -.. note:: - - The tag is *signed*; you must configure Git for :ref:`signing commits and - tags ` before you make a release the first time. - After pushing the new release to Github, the script bumps the version number - again, to the next snapshot, and commits the changes again. - -Once the script is completed please - -1. Edit the `release information`_ on Github and add a short summary about the - release. Don’t forget to add a link to the complete changelog and upload the - package TAR file. -2. Enable the new release on the ReadTheDocs `versions dashboard`_. -3. Announce the new release in our Gitter_ channel, and wherever else you see - fit. - -.. _release information: https://github.com/flycheck/flycheck/releases -.. _versions dashboard: https://readthedocs.org/dashboard/flycheck/versions/ -.. _Gitter: https://gitter.im/flycheck/flycheck - -New maintainers -=============== - -To propose a new maintainer open a pull request that adds the user to -``MAINTAINERS`` and ``doc/community/people.rst``. The pull request is subject -to the :ref:`same rules ` as all other pull -requests. Notably it goes through the same approval process. - -Once merged please also - -- add the new maintainer to the ``Maintainers`` team of the Github - organisation. This does not award additional privileges, it's just to support - ``@flycheck/maintainers`` mentions for the sake of convenience, -- invite the new maintainer to the internal `Maintainers channel`_ on Gitter, - -.. _Maintainers channel: https://gitter.im/flycheck/maintainers diff --git a/emacs.d/vendor/flycheck/doc/contributor/style-guide.rst b/emacs.d/vendor/flycheck/doc/contributor/style-guide.rst deleted file mode 100644 index 74f388d..0000000 --- a/emacs.d/vendor/flycheck/doc/contributor/style-guide.rst +++ /dev/null @@ -1,193 +0,0 @@ -.. _flycheck-style-guide: - -============= - Style Guide -============= - -This document describes our code style. It tells you what to look for when -making changes to Flycheck, or when reviewing pull requests. - -Features -======== - -Flycheck’s scope and focus is providing the infrastructure and foundations for -on-the-fly syntax checking. Flycheck provides the basics but deep integration -with particular programming languages is best left to :ref:`separate packages -`. - -Whether a feature is within the scope of Flycheck is the :ref:`maintainer’s -` judgement call. Generally we reserve the right to -reject any pull request for being out of scope. - -* Avoid a *disproportionate amount of code* for a single syntax checker or - language. Look at the built-in checkers for judgement. A syntax checker that - requires a lot more code than any built-in checker is likely to be rejected. - -* Avoid *deep integration* with a particular UI or completion framework. Emacs’ - standard is our standard: We will reject code that is tied to Helm or Counsel. - -* Likewise do not deviate from Emacs’ default behaviour too much. Stick to - Emacs’ standard for key bindings, interactive functions, etc. - -Backward compatibility -====================== - -Checkers and languages evolve over time, and their error format often change as -a consequence. It is not a goal of Flycheck to work with every version of every -checker ever supported. However, the latest Flycheck version *should always -work* with the contemporary version of a checker. - -As a rule of thumb, if maintaining backward compatibility is trivial (i.e., does -not incur code maintenance costs), then we should do it. For example, a -slightly more complex parsing regexp is OK, but doing version detection to add a -flag would most likely be too much. - -Keep in mind that users may not have the choice of updating to the latest -version of a checker (e.g., ``gcc`` on Debian-based distributions). On the -other hand, npm or Python packages are usually trivial to update. Making an -extra effort to maintain backward compatibility for these hard-to-update -checkers is reasonable. - -The integration tests that are run on our CI should always reflect the latest -supported version. - -Style -===== - -.. important:: - - ``make check compile`` must pass on Emacs 25 or newer. This command checks - for some formatting issues and compilation errors. - - Run ``make format`` with Emacs 25 to automatically reformat the Emacs Lisp - source files. - -* Generally try to fit into the style of the code you see. - -* Indent with the default indentation rules. - -* Follow the :infonode:`(elisp)Programming Tips` for Emacs Lisp. - -* Whitespace: - - * 80 characters per line. - * Avoid tabs and trailing spaces. - -* Naming: - - * Prefix all variables and functions with the name of the containing library, - i.e. ``flycheck-`` for everything that is in :file:`flycheck.el`. - - * End boolean predicates with ``-p``, i.e. ``flycheck-valid-checker-p``. - -* Avoid macros, and use them for syntax only. - -* Adhere to the :infonode:`(elisp)Key Binding Conventions`. Particularly do not - define keys in Emacs’ reserved keymaps or in the :samp:`C-c {LETTER}` space - for user bindings. - -Libraries -========= - -* Do **not** advise built-in or 3rd party functions and commands. - -* Do **not** redefine built-in or 3rd party functions, unless for compatibility, - but then copy the newer definition verbatim. - -* Do **not** use ``with-eval-after-load`` and similar functions. - -* Dependencies: - - * Use built-in Emacs libraries freely. - * Introduce external dependencies with care. Prefer built-in - libraries. ``dash.el`` is fine, though. - * Avoid dependencies on language-specific libraries. - -* Avoid ``cl-lib``: - - * Prefer ``seq`` over ``dash`` over ``cl-lib``. Use list functions from - ``cl-lib`` only as the very last resort. - * Prefer ``let-alist`` and ``pcase`` over ``cl-destructuring-bind``. - -Tests -===== - -* Add comprehensive buttercup specs for new functions and commands to - :file:`test/specs/`. Check whether the specs fit into an existing spec file, - or add a new file instead. In doubt, use a new file. - -* For new syntax checkers add at least one syntax checker integration test to - :file:`test/flycheck-test.el`. Make sure that the test passes with - :samp:`make LANGUAGE={language} integ`. - -Documentation -============= - -* Add docstrings to all functions and variables. - -* Follow the :infonode:`(elisp)Documentation Tips`. - -* Take care to update our manual: - - * Document new interactive commands and user options in the :ref:`user guide - `. - * Document new syntax checkers and new options for existing syntax checkers in - the :ref:`list of languages `. - * Document new or changed version requirements for syntax checkers in the - :ref:`list of languages `. - * Document changes to our build system and tooling in the :ref:`contributor’s - guide ` or the :ref:`maintainer’s guide - `. - -Commits -======= - -* Make each commit self-contained. - -* Squash trivial fixes into previous commits so that no commit in and by itself - violates this style guide. - -* Write commit messages that adhere to the style illustrated below. - -* In doubt prefer long messages over short messages. Take the time to write a - good message that explains the intention of the change and illustrates - noteworthy aspects of the implementation. - -* If the commit fixes a bug try to reproduce a brief description of the bug in - the message and make sure to mention the corresponding GitHub issue - (e.g. ``Fixes GH-42``). - -Commit message style --------------------- - -This model commit message illustrates our style:: - - Fix a foo bug - - The first line is the summary, 50 characters or less. Write in the - imperative and in present tense: “Fix bug”, not “fixed bug” or “fixes - bug”. Explain the intend of the change not the actual contents which the - diff already provides - - After the summary more paragraphs with detailed explanations may follow, - wrapped at 72 characters. Separate multiple paragraphs by blank lines. - - You may use simple formatting like *emphasis* or _underline_, but keep - it to a minimum. Commit messages are not in Markdown :) - - Commit messages may reference issues by number, like this: See GH-42. - Please use `GH-` to prefix issue numbers. You may also close issues - like this: Fixes GH-42 and closes GH-42. - -`Git Commit`_ and Magit_ provide Emacs mode for Git commit messages, which helps -you to comply to these guidelines. - -.. seealso:: - - `A Note About Git Commit Messages`_ - Further information about good commit messages, including some motivation - for our rules for commit messages. - -.. _Git Commit: https://github.com/magit/magit/ -.. _Magit: https://github.com/magit/magit/ -.. _A Note About Git Commit Messages: https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html diff --git a/emacs.d/vendor/flycheck/doc/developer/developing.rst b/emacs.d/vendor/flycheck/doc/developer/developing.rst deleted file mode 100644 index d440fbe..0000000 --- a/emacs.d/vendor/flycheck/doc/developer/developing.rst +++ /dev/null @@ -1,399 +0,0 @@ -.. _flycheck-developers-guide: - -================= -Developer's Guide -================= - -So you want to extend Flycheck, but have no idea where to start? This guide -will give you an overview of Flycheck internals, and take you through adding a -syntax checker to Flycheck. - -An overview of Flycheck internals -================================= - -The goal of Flycheck is to display errors from external checker programs -directly in the buffer you are editing. Instead of you manually invoking -``make`` or the compiler for your favorite language, Flycheck takes care of it -for you, collects the errors and displays them right there in the buffer. - -How Flycheck works is rather straightforward. Whenever a syntax check is -started (see :ref:`flycheck-syntax-checks`), the following happens: - -1. First, Flycheck runs the external program as an asynchronous process using - ``start-process``. While this process runs, Flycheck simply accumulates its - output. -2. When the process exits, Flycheck parses its output in order to collect the - errors. The raw output is turned into a list of `flycheck-error` objects - containing, among others, the filename, line, column, message and severity of - the error. -3. Flycheck then filters the collected errors to keep only the relevant ones. - For instance, errors directed at other files than the one you are editing are - discarded. The exact sementics of which errors are relevant is defined in - ``flycheck-relevant-error-p``. -4. Relevant errors are highlighted by Flycheck in the buffer, according to user - preference. By default, each error adds a mark in the fringe at the line it - occurs, and underlines the symbol at the position of the error using - *overlays*. -5. Finally, Flycheck rebuilds the error list buffer. - -Flycheck follows this process for all the :ref:`many different syntax checkers -` that are provided by default. - -.. note:: - - Specifically, the above describes the process of *command checkers*, i.e., - checkers that run external programs. All the checkers defined in - ``flycheck-checkers`` are command checkers, but command checkers are actually - instances of *generic checkers*. Many external packages, such as - ``dafny-mode``, ``fstar-mode``, etc. use generic checkers, which allow you - more flexibility, including running Flycheck with persistent subprocess such - as language servers. See :flyc:`flycheck-ocaml` for an example - of how to use a generic checker. - -.. seealso:: - - :infonode:`(elisp)Asynchronous Processes` - How to run and control asynchronous processes from inside Emacs. - - :infonode:`(elisp)Overlays` - How to add temporary annotations to a buffer. - -.. _adding-a-checker: - -Adding a syntax checker to Flycheck -=================================== - -To add a syntax checker to Flycheck, you need to answer a few questions: - -- How to invoke the checker? What is the name of its program, and what - arguments should Flycheck pass to it? -- How to parse the error messages from the checker output? -- What language (or languages) will the checker be used for? - -For instance, if I were to manually run the Scala compiler ``scalac`` on the -following ``hello.scala`` file: - -.. code-block:: scala - - object { - println("Hello, world") - } - -Here is the output I would get: - -.. code-block:: console - - $ scalac hello.scala - hello.scala:1: error: identifier expected but '{' found. - object { - ^ - one error found - - -The compiler reports one syntax error from the file ``hello.scala``, on line 3, -with severity ``error``, and the rest of the line contains the error message. - -So, if we want to instruct Flycheck to run ``scalac`` on our Scala files, we -need to tell Flycheck to: - -- Invoke ``scalac FILE-NAME`` -- Get errors from output lines of the form: ``file-name:line: error:message`` - -Writing the checker -------------------- - -Once you have answered these questions, you merely have to translate the answers -to Emacs Lisp. Here is the full definition of the ``scala`` checker you can -find in ``flycheck.el``: - -.. code-block:: elisp - - (flycheck-define-checker scala - "A Scala syntax checker using the Scala compiler. - - See URL `https://www.scala-lang.org/'." - :command ("scalac" "-Ystop-after:parser" source) - :error-patterns - ((error line-start (file-name) ":" line ": error: " (message) line-end)) - :modes scala-mode - :next-checkers ((warning . scala-scalastyle))) - -The code is rather self-explanatory; but we'll go through it nonetheless. - -First, we define a checker using `flycheck-define-checker`. Its first argument, -``scala``, is the name of the checker, as a symbol. The name is used to refer -to the checker in the documentation, so it should usually be the name of the -language to check, or the name of the program used to do the checking, or a -combination of both. Here, ``scalac`` is the program, but the checker is named -``scala``. There is another Scala checker using ``scalastyle``, with the name -``scala-scalastyle``. See `flycheck-checkers` for the full list of checker -names defined in Flycheck. - -After the name comes the docstring. This is a documentation string answering -three questions: 1) What language is this checker for? 2) What is the program -used? 3) Where can users get this program? Nothing more. In particular, this -string does *not* include user documentation, which should rather go in the -manual (see :ref:`flycheck-languages`). - -The rest of the arguments are keyword arguments; their order does not matter, -but they are usually given in the fashion above. - -- ``:command`` describes what command to run, and what arguments to pass. Here, - we tell Flycheck to run ``scalac -Ystop-after:parser`` on ``source``. In - Flycheck, we usually want to get error feedback as fast as possible, hence we - will pass any flag that will speed up the invocation of a compiler, even at - the cost of missing out on some errors. Here, we are telling ``scalac`` to - stop after the parsing phase to ensure we are getting syntax errors quickly. - - The ``source`` argument is special: it instructs Flycheck to create a - temporary file containing the content of the current buffer, and to pass that - temporary file as argument to ``scalac``. That way, ``scalac`` can be run on - the content of the buffer, even when the buffer has not been saved. There are - other ways to pass the content of the buffer to the command, e.g., by piping - it through standard input. These special arguments are described in the - docstring of `flycheck-substitute-argument`. - -- ``:error-patterns`` describes how to parse the output, using the `rx` regular - expression syntax. Here, we expect ``scalac`` to return error messages of the - form:: - - file:line: error: message - - This is a common output format for compilers. With the following - ``:error-patterns`` value: - - .. code-block:: elisp - - ((error line-start (file-name) ":" line ": error: " (message) line-end)) - - we tell Flycheck to extract three parts from each line in the output that - matches the pattern: the ``file-name``, the ``line`` number, and the - ``message`` content. These three parts are then used by Flycheck to create a - `flycheck-error` with the ``error`` severity. - -- ``:modes`` is the list of Emacs major modes in which this checker can run. - Here, we want the checker to run only in ``scala-mode`` buffers. - -That's it! This definition alone contains everything Flycheck needs to run -``scalac`` on a Scala buffer and parse its output in order to give error -feedback to the user. - -.. note:: - - ``rx.el`` is a built-in Emacs module for declarative regular expressions. - Look for the documentation of the `rx` function inside Emacs for its usage. - Flycheck extends `rx` with a few constructs like ``line``, ``file-name`` and - ``message``. You can find them the full list in the docstring for - `flycheck-rx-to-string`. - -Registering the checker ------------------------ - -Usually, you'll want to register the checker so that it is eligible for -automatic selection. For that, you just need to add the checker symbol to -`flycheck-checkers`. The order of checkers does matter, as only one checker can -be enabled in a buffer at a time. Usually you want to put the most useful -checker as the first checker for that mode. For instance, here are the -JavaScript checkers provided by Flycheck: - -.. code-block:: console - - javascript-eslint - javascript-jshint - javascript-gjslint - javascript-jscs - javascript-standard - -If a buffer is in ``js-mode``, Flycheck will try first to enable -``javascript-eslint`` before any other JavaScript checker. - -There are other factors governing checker selection in a buffer, namely whether -a checker is disabled by user configuration (see -:ref:`flycheck-disable-checkers`), and whether this checker *can* be enabled -(see the ``:enabled`` property in `flycheck-define-generic-checker`). - -.. seealso:: - - flycheck-get-checker-for-buffer - This is the function that looks through `flycheck-checkers` to find a - valid checker for the buffer. - -Writing more complex checkers ------------------------------ - -Here are two examples of more complex checkers: - -.. code-block:: elisp - - (flycheck-define-checker protobuf-protoc - "A protobuf syntax checker using the protoc compiler. - - See URL `https://developers.google.com/protocol-buffers/'." - :command ("protoc" "--error_format" "gcc" - (eval (concat "--java_out=" (flycheck-temp-dir-system))) - ;; Add the file directory of protobuf path to resolve import directives - (eval (concat "--proto_path=" (file-name-directory (buffer-file-name)))) - source-inplace) - :error-patterns - ((info line-start (file-name) ":" line ":" column - ": note: " (message) line-end) - (error line-start (file-name) ":" line ":" column - ": " (message) line-end) - (error line-start - (message "In file included from") " " (file-name) ":" line ":" - column ":" line-end)) - :modes protobuf-mode - :predicate (lambda () (buffer-file-name))) - -.. code-block:: elisp - - (flycheck-define-checker sh-shellcheck - "A shell script syntax and style checker using Shellcheck. - - See URL `https://github.com/koalaman/shellcheck/'." - :command ("shellcheck" - "--format" "checkstyle" - "--shell" (eval (symbol-name sh-shell)) - (option-flag "--external-sources" - flycheck-shellcheck-follow-sources) - (option "--exclude" flycheck-shellcheck-excluded-warnings list - flycheck-option-comma-separated-list) - "-") - :standard-input t - :modes sh-mode - :error-parser flycheck-parse-checkstyle - :error-filter (lambda (errors) - (flycheck-remove-error-file-names "-" errors)) - :predicate (lambda () (memq sh-shell '(bash ksh88 sh))) - :verify - (lambda (_) - (let ((supported (memq sh-shell '(bash ksh88 sh)))) - (list (flycheck-verification-result-new - :label (format "Shell %s supported" sh-shell) - :message (if supported "yes" "no") - :face (if supports-shell 'success '(bold warning)))))) - :error-explainer - (lambda (err) - (let ((error-code (flycheck-error-id err)) - (url "https://github.com/koalaman/shellcheck/wiki/%S")) - (and error-code `(url . ,(format url error-code)))))) - -The ``:command`` forms are longer, as the checkers pass more flags to ``protoc`` -and ``shellcheck``. Note the use of ``eval``, ``option``, and ``option-flag`` -for transforming Flycheck checker options into flags for the command. See the -docstring for `flycheck-substitute-argument` for more info, and look at other -checkers for examples. - -The ``shellcheck`` checker does no use ``source`` nor ``source-inplace``: -instead, it passes the buffer contents on standard input, using -``:standard-input t``. - -The ``protoc`` checker has three patterns in ``:error-patterns``; the first one -will catch ``notes`` from the compiler and turn them into `flycheck-error` -objects with the ``info`` severity; the second is for errors from the file being -checked, and the third one is for errors from other files. In the -``shellcheck`` checker, on the other hand, ``:error-parser`` replaces -``:error-patterns``: ``shellcheck`` outputs results in the standard CheckStyle -XML format, so the definition above uses Flycheck's built-in CheckStyle parser, -and an ``:error-filter`` to replace ``-`` by the current buffer's filename. - -Both checkers use a new ``:predicate`` property to determine when the checker -can be called. In addition to the ``:mode`` property which restricts the -``protoc`` checker to buffers in ``protobuf-mode``, the ``:predicate`` property -ensures that ``protoc`` is called only when there is a file associated to the -buffer (this is necessary since we are passing the file associated to the buffer -``protobuf`` using ``source-inplace`` in ``:command``; in contrast, the -``shellcheck`` checker can run in all buffers, because it sends buffer contents -through a pipe). The second checker has a more complex ``:predicate`` to make -sure that the current shell dialect is supported, and a ``:verify`` function to -help users diagnose configuration issues ( ``:verify`` is helpful for giving -feedback to users; its output gets included when users invoke -`flycheck-verify-setup`) - -Finally, the ``shellcheck`` checker includes an error explainer, which opens the -relevant page on the ShellCheck wiki when users run -`flycheck-explain-error-at-point`. - -There are other useful properties, depending on your situation. Most important -is ``:enabled``, which is like ``:predicate`` but is run only once; it is used -to make sure a checker has everything it needs before being allowed to run in a -buffer (this is particularly useful when the checks are costly: running an -external program and parsing its output, checking for a plugin, etc.). - -.. seealso:: - - flycheck-define-generic-checker - For the full documentation of all the properties you can pass to - `flycheck-define-checker`. Look also in the docstring for - `flycheck-define-command-checker` for additional properties. - -.. note:: - - Don't be afraid to look into the ``flycheck.el`` code. The existing checkers - serve as useful examples you can draw from, and all core functions are - documented. - -Sharing your checker --------------------- - -Once you have written your own syntax checker, why not `submit a pull request -`__ to integrate it into Flycheck? -If it's useful to you, it may be useful for someone else! Please do check out -our :ref:`flycheck-contributors-guide` to learn how we deal with pull requests. - -Issues with auto-quoting in `flycheck-define-checker` ------------------------------------------------------ - -You may have noticed that lists passed to the ``:command`` or -``:error-patterns`` in the snippets above are not quoted. That is because -`flycheck-define-checker` is a macro which automatically quotes these arguments -(not unlike ``use-package`` and other configuration macros). - -While this makes for less noisy syntax, it unfortunately prevents you from -defining a checker with compile-time arguments. For example, you may be tempted -to have a custom checker in your Emacs configuration written like this: - -.. code-block:: elisp - - (flycheck-define-checker my-foobar-checker - :command ("foobar" source) - :error-patterns ((error …)) - :modes `(foobar-mode ,my-other-foobar-mode)) - -The idea is that you know statically one mode that you want to use the checker -in: ``foobar-mode``, but another mode can be given via the variable -``my-other-foobar-mode`` before the checker is defined. This won't work, -because the ``:modes`` property is auto-quoted by `flycheck-define-checker`. -The issue arises not just with ``:modes``:, but with almost all the other -properties since they are also auto-quoted. - -If you do find yourself in need to define such a checker, there is a solution -though. The `flycheck-define-checker` macro is just a convenience over -`flycheck-define-command-checker`, so you could define the checker above as -follows: - -.. code-block:: elisp - - (flycheck-def-executable-var my-foobar-checker "foobar") - (flycheck-define-command-checker 'my-foobar-checker - :command '("foobar" source) - :error-patterns '((error …)) - :modes `(foobar-mode ,my-other-foobar-mode)) - -Using `flycheck-define-command-checker`, you now need to quote all the list -arguments, but now with the confidence that no auto-quoting will take place, -since `flycheck-define-command-checker` is just a function. Also note that you -need to explicitly define the executable variable for the checker. Using -`flycheck-define-command-checker` is the recommended way to define a checker -with compile-time arguments. - -.. note:: - - The `flycheck-define-checker` macro is an autoload, so using it inside a - `with-eval-after-load` form will load all of Flycheck. While this ensures - the macro is correctly expanded, it also defeats the purpose of using - `with-eval-after-load`. - - For the background behind this state of affairs, see `issue 1398`_. - - .. _issue 1398: https://github.com/flycheck/flycheck/issues/1398 diff --git a/emacs.d/vendor/flycheck/doc/elisp.py b/emacs.d/vendor/flycheck/doc/elisp.py deleted file mode 100644 index 1a96b12..0000000 --- a/emacs.d/vendor/flycheck/doc/elisp.py +++ /dev/null @@ -1,433 +0,0 @@ -# Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -# This file is not part of GNU Emacs. - -# 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 3 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 . - - -from collections import namedtuple -from sphinx import addnodes -from sphinx.util import ws_re -from sphinx.roles import XRefRole -from sphinx.domains import Domain, ObjType -from sphinx.util.nodes import make_refnode -from sphinx.directives import ObjectDescription - - -def make_target(cell, name): - """Create a target name from ``cell`` and ``name``. - - ``cell`` is the name of a symbol cell, and ``name`` is a symbol name, both - as strings. - - The target names are used as cross-reference targets for Sphinx. - - """ - return '{cell}-{name}'.format(cell=cell, name=name) - - -def to_mode_name(symbol_name): - """Convert ``symbol_name`` to a mode name. - - Split at ``-`` and titlecase each part. - - """ - return ' '.join(p.title() for p in symbol_name.split('-')) - - -class Cell(namedtuple('Cell', 'objtype docname')): - """A cell in a symbol. - - A cell holds the object type and the document name of the description for - the cell. - - Cell objects are used within symbol entries in the domain data. - - """ - - pass - - -class KeySequence(namedtuple('KeySequence', 'keys')): - """A key sequence.""" - - PREFIX_KEYS = {'C-u'} - PREFIX_KEYS.update('M-{}'.format(n) for n in range(10)) - - @classmethod - def fromstring(cls, s): - return cls(s.split()) - - @property - def command_name(self): - """The command name in this key sequence. - - Return ``None`` for key sequences that are no command invocations with - ``M-x``. - - """ - try: - return self.keys[self.keys.index('M-x') + 1] - except ValueError: - return None - - @property - def has_prefix(self): - """Whether this key sequence has a prefix.""" - return self.keys[0] in self.PREFIX_KEYS - - def __str__(self): - return ' '.join(self.keys) - - -class EmacsLispSymbol(ObjectDescription): - """An abstract base class for directives documenting symbols. - - Provide target and index generation and registration of documented symbols - within the domain data. - - Deriving classes must have a ``cell`` attribute which refers to the cell - the documentation goes in, and a ``label`` attribute which provides a - human-readable name for what is documented, used in the index entry. - - """ - - cell_for_objtype = { - 'defcustom': 'variable', - 'defconst': 'variable', - 'defvar': 'variable', - 'defface': 'face' - } - - @property - def cell(self): - """The cell in which to store symbol metadata.""" - return self.cell_for_objtype[self.objtype] - - @property - def label(self): - """The label for the documented object type.""" - return self.objtype - - def handle_signature(self, signature, signode): - """Create nodes in ``signode`` for the ``signature``. - - ``signode`` is a docutils node to which to add the nodes, and - ``signature`` is the symbol name. - - Add the object type label before the symbol name and return - ``signature``. - - """ - label = self.label + ' ' - signode += addnodes.desc_annotation(label, label) - signode += addnodes.desc_name(signature, signature) - return signature - - def _add_index(self, name, target): - index_text = '{name}; {label}'.format( - name=name, label=self.label) - self.indexnode['entries'].append( - ('pair', index_text, target, '', None)) - - def _add_target(self, name, sig, signode): - target = make_target(self.cell, name) - if target not in self.state.document.ids: - signode['names'].append(name) - signode['ids'].append(target) - signode['first'] = (not self.names) - self.state.document.note_explicit_target(signode) - - obarray = self.env.domaindata['el']['obarray'] - symbol = obarray.setdefault(name, {}) - if self.cell in symbol: - self.state_machine.reporter.warning( - 'duplicate description of %s %s, ' % (self.objtype, name) - + 'other instance in ' - + self.env.doc2path(symbol[self.cell].docname), - line=self.lineno) - symbol[self.cell] = Cell(self.objtype, self.env.docname) - - return target - - def add_target_and_index(self, name, sig, signode): - target = self._add_target(name, sig, signode) - self._add_index(name, target) - - -class EmacsLispMinorMode(EmacsLispSymbol): - cell = 'function' - label = 'Minor Mode' - - def handle_signature(self, signature, signode): - """Create nodes in ``signode`` for the ``signature``. - - ``signode`` is a docutils node to which to add the nodes, and - ``signature`` is the symbol name. - - Add the object type label before the symbol name and return - ``signature``. - - """ - label = self.label + ' ' - signode += addnodes.desc_annotation(label, label) - signode += addnodes.desc_name(signature, to_mode_name(signature)) - return signature - - def _add_index(self, name, target): - return super()._add_index(to_mode_name(name), target) - - -class EmacsLispFunction(EmacsLispSymbol): - """A directive to document Emacs Lisp functions.""" - - cell_for_objtype = { - 'defun': 'function', - 'defmacro': 'function' - } - - def handle_signature(self, signature, signode): - function_name, *args = ws_re.split(signature) - label = self.label + ' ' - signode += addnodes.desc_annotation(label, label) - signode += addnodes.desc_name(function_name, function_name) - for arg in args: - is_keyword = arg.startswith('&') - node = (addnodes.desc_annotation - if is_keyword - else addnodes.desc_addname) - signode += node(' ' + arg, ' ' + arg) - - return function_name - - -class EmacsLispKey(ObjectDescription): - """A directive to document interactive commands via their bindings.""" - - label = 'Interactive command' - - def handle_signature(self, signature, signode): - """Create nodes to ``signode`` for ``signature``. - - ``signode`` is a docutils node to which to add the nodes, and - ``signature`` is the symbol name. - """ - key_sequence = KeySequence.fromstring(signature) - signode += addnodes.desc_name(signature, str(key_sequence)) - return str(key_sequence) - - def _add_command_target_and_index(self, name, sig, signode): - target_name = make_target('function', name) - if target_name not in self.state.document.ids: - signode['names'].append(name) - signode['ids'].append(target_name) - self.state.document.note_explicit_target(signode) - - obarray = self.env.domaindata['el']['obarray'] - symbol = obarray.setdefault(name, {}) - if 'function' in symbol: - self.state_machine.reporter.warning( - 'duplicate description of %s %s, ' % (self.objtype, name) - + 'other instance in ' - + self.env.doc2path(symbol['function'].docname), - line=self.lineno) - symbol['function'] = Cell(self.objtype, self.env.docname) - - index_text = '{name}; {label}'.format(name=name, label=self.label) - self.indexnode['entries'].append( - ('pair', index_text, target_name, '', None)) - - def _add_binding_target_and_index(self, binding, sig, signode): - reftarget = make_target('key', binding) - - if reftarget not in self.state.document.ids: - signode['names'].append(reftarget) - signode['ids'].append(reftarget) - signode['first'] = (not self.names) - self.state.document.note_explicit_target(signode) - - keymap = self.env.domaindata['el']['keymap'] - if binding in keymap: - self.state_machine.reporter.warning( - 'duplicate description of binding %s, ' % binding - + 'other instance in ' - + self.env.doc2path(keymap[binding]), - line=self.lineno) - keymap[binding] = self.env.docname - - index_text = '{name}; key binding'.format(name=binding) - self.indexnode['entries'].append( - ('pair', index_text, reftarget, '', None)) - - def add_target_and_index(self, name, sig, signode): - # If unprefixed M-x command index as function and not as key binding - sequence = KeySequence.fromstring(name) - if sequence.command_name and not sequence.has_prefix: - self._add_command_target_and_index(sequence.command_name, - sig, signode) - else: - self._add_binding_target_and_index(name, sig, signode) - - -class XRefModeRole(XRefRole): - """A role to cross-reference a minor mode. - - Like a normal cross-reference role but appends ``-mode`` to the reference - target and title-cases the symbol name like Emacs does when referring to - modes. - - """ - - fix_parens = False - lowercase = False - - def process_link(self, env, refnode, has_explicit_title, title, target): - refnode['reftype'] = 'minor-mode' - target = target + '-mode' - return (title if has_explicit_title else to_mode_name(target), target) - - -class EmacsLispDomain(Domain): - """A domain to document Emacs Lisp code.""" - - name = 'el' - label = 'Emacs Lisp' - - object_types = { - # TODO: Set search prio for object types - # Types for user-facing options and commands - 'minor-mode': ObjType('minor-mode', 'function', 'mode', - cell='function'), - 'define-key': ObjType('key binding', cell='interactive'), - 'defcustom': ObjType('defcustom', 'defcustom', cell='variable'), - 'defface': ObjType('defface', 'defface', cell='face'), - # Object types for code - 'defun': ObjType('defun', 'defun', cell='function'), - 'defmacro': ObjType('defmacro', 'defmacro', cell='function'), - 'defvar': ObjType('defvar', 'defvar', cell='variable'), - 'defconst': ObjType('defconst', 'defconst', cell='variable') - } - directives = { - 'minor-mode': EmacsLispMinorMode, - 'define-key': EmacsLispKey, - 'defcustom': EmacsLispSymbol, - 'defvar': EmacsLispSymbol, - 'defconst': EmacsLispSymbol, - 'defface': EmacsLispSymbol, - 'defun': EmacsLispFunction, - 'defmacro': EmacsLispFunction - } - roles = { - 'mode': XRefModeRole(), - 'defvar': XRefRole(), - 'defconst': XRefRole(), - 'defcustom': XRefRole(), - 'defface': XRefRole(), - 'defun': XRefRole(), - 'defmacro': XRefRole() - } - - data_version = 1 - initial_data = { - # Our domain data attempts to somewhat mirror the semantics of Emacs - # Lisp, so we have an obarray which holds symbols which in turn have - # function, variable, face, etc. cells, and a keymap which holds the - # documentation for key bindings. - 'obarray': {}, - 'keymap': {} - } - - def clear_doc(self, docname): - """Clear all cells documented ``docname``.""" - for symbol in self.data['obarray'].values(): - for cell in list(symbol.keys()): - if docname == symbol[cell].docname: - del symbol[cell] - for binding in list(self.data['keymap']): - if self.data['keymap'][binding] == docname: - del self.data['keymap'][binding] - - def resolve_xref(self, env, fromdocname, builder, - objtype, target, node, contnode): - """Resolve a cross reference to ``target``.""" - if objtype == 'key': - todocname = self.data['keymap'].get(target) - if not todocname: - return None - reftarget = make_target('key', target) - else: - cell = self.object_types[objtype].attrs['cell'] - symbol = self.data['obarray'].get(target, {}) - if cell not in symbol: - return None - reftarget = make_target(cell, target) - todocname = symbol[cell].docname - - return make_refnode(builder, fromdocname, todocname, - reftarget, contnode, target) - - def resolve_any_xref(self, env, fromdocname, builder, - target, node, contnode): - """Return all possible cross references for ``target``.""" - nodes = ((objtype, self.resolve_xref(env, fromdocname, builder, - objtype, target, node, contnode)) - for objtype in ['key', 'defun', 'defvar', 'defface']) - return [('el:{}'.format(objtype), node) for (objtype, node) in nodes - if node is not None] - - def merge_warn_duplicate(self, objname, our_docname, their_docname): - self.env.warn( - their_docname, - "Duplicate declaration: '{}' also defined in '{}'.\n".format( - objname, their_docname)) - - def merge_keymapdata(self, docnames, our_keymap, their_keymap): - for key, docname in their_keymap.items(): - if docname in docnames: - if key in our_keymap: - our_docname = our_keymap[key] - self.merge_warn_duplicate(key, our_docname, docname) - else: - our_keymap[key] = docname - - def merge_obarraydata(self, docnames, our_obarray, their_obarray): - for objname, their_cells in their_obarray.items(): - our_cells = our_obarray.setdefault(objname, dict()) - for cellname, their_cell in their_cells.items(): - if their_cell.docname in docnames: - our_cell = our_cells.get(cellname) - if our_cell: - self.merge_warn_duplicate(objname, our_cell.docname, - their_cell.docname) - else: - our_cells[cellname] = their_cell - - def merge_domaindata(self, docnames, otherdata): - self.merge_keymapdata(docnames, self.data['keymap'], - otherdata['keymap']) - self.merge_obarraydata(docnames, self.data['obarray'], - otherdata['obarray']) - - def get_objects(self): - """Get all documented symbols for use in the search index.""" - for name, symbol in self.data['obarray'].items(): - for cellname, cell in symbol.items(): - yield (name, name, cell.objtype, cell.docname, - make_target(cellname, name), - self.object_types[cell.objtype].attrs['searchprio']) - - -def setup(app): - app.add_domain(EmacsLispDomain) - return {'version': '0.1', 'parallel_read_safe': True} diff --git a/emacs.d/vendor/flycheck/doc/glossary.rst b/emacs.d/vendor/flycheck/doc/glossary.rst deleted file mode 100644 index 489f2cb..0000000 --- a/emacs.d/vendor/flycheck/doc/glossary.rst +++ /dev/null @@ -1,53 +0,0 @@ -========== - Glossary -========== - -The glossary explains most of the special terms we use in this documentation. -some of these are originally explained in the `Emacs manual`_ or the `Emacs Lisp -reference`_, but we reproduce them here for convenience. - -.. _Emacs manual: https://www.gnu.org/software/emacs/manual/html_node/emacs/index.html -.. _Emacs Lisp reference: https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html - -.. glossary:: - - init file - user init file - Your main Emacs configuration file. It’s typically located in your - :term:`user emacs directory` at :file:`$HOME/.emacs.d/init.el`. Emacs - also looks at :file:`$HOME/.emacs`, but this location is not recommended - anymore. To find out the actual path to your init file of your Emacs - session inspect the value of the variable `user-init-file` with :kbd:`C-h - v user-init-file`. You can visit it directly with :kbd:`M-: (find-file - user-init-file)`. - - .. seealso:: - - :infonode:`(emacs)Init File` - More information about the init file. - - :infonode:`(elisp)Init File` - Programming interface for the init file. - - user emacs directory - The directory for all Emacs related files of the current user, at - :file:`~/.emacs.d/`. Many Emacs packages create data files in this - directory, and it holds the recommended location for the :term:`init file` - at :file:`~/.emacs.d/init.el`. - - registered syntax checker - A syntax checker in `flycheck-checkers`. Flycheck will only use these - syntax checkers when checking buffers automatically. - - verification buffer - A buffer shown by `M-x flycheck-verify-setup`. This buffer contains - information about the Flycheck setup for the current buffer. - - executable option - executable options - Options to override the executables of syntax checkers that run external - commands. They are named :samp:`flycheck-{checker}-executable`, - e.g. ``flycheck-c/c++-clang-executable`` for `c/c++-clang`. - - Flycheck implicit defines these options for all syntax checkers defined - with `flycheck-define-checker`. diff --git a/emacs.d/vendor/flycheck/doc/images/flycheck-annotated.png b/emacs.d/vendor/flycheck/doc/images/flycheck-annotated.png deleted file mode 100644 index f2f055a210e5c3d2c1012f851d1e75be0622587a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225674 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

$_jyI7rxWYFN4$FTD*=!Or3wk+epKF1;VEs(nH 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 diff --git a/emacs.d/vendor/flycheck/doc/images/flycheck-error-list.png b/emacs.d/vendor/flycheck/doc/images/flycheck-error-list.png deleted file mode 100644 index 4a77043e4b5f4cf921ec76ee6ee61d2fb7d1bf63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49690 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 Rm4Dg}E6S?L6iJzU{$Fbs;qL$d diff --git a/emacs.d/vendor/flycheck/doc/images/flycheck-error-reports.png b/emacs.d/vendor/flycheck/doc/images/flycheck-error-reports.png deleted file mode 100644 index f599e92e74a03e14ecabfcba0c5754a2b2639909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37396 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�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 Dw(F3` diff --git a/emacs.d/vendor/flycheck/doc/images/flycheck-menu.png b/emacs.d/vendor/flycheck/doc/images/flycheck-menu.png deleted file mode 100644 index 506f1d0dd49d60ed44148fd8e2bb777d663428ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139811 zcmZU&1CV7wmo-|p-DTT0yURAZY}>YNql;a(ZQHhO|F^%HH!~6MMBIpTGk0d5+*o_< z%y4;GF?bkk7$6`ZcnR^JiawmYC}p_owmbkKYM|#KgoxzevLZppk^oqDYbB2qVN5 zg%ps%!O_q`2_?F8;I2KdTA#N$j-{vT7Z=&&RGuHC7eRW&3Vw=)6ifgG1&b-+Ny7(i zZtw*`|M3Ij1Y*$x=S9mc75C=hp}7%=eI@dn;U*ZJwfdB6{NC!_JI6c(1u}qa@AUrT z)koL`43siUk$?>kR0TTrYrlZR+zrOSg_;!V76u-&!jRVpai!B&zt$O#0#XF%CIbjb z0u6=@2uPHK5;Nuz+Rp{cTc5zP#a5mZw+VKSj^7`Ra=$W^8>hdI*vt*Yfa=;5%1F-3%^j`HcufOObGK0$68Ne^9lX7Dp>ggUALZ0RMBS)1S#?3Tggf*sB0epB9*6VB4EYGzIA%)NgJ$i1Yk=2nCJ$ z=lNTykbFbyyzPZ>wB3s}0Xza?V}2!~8Kex{1Iu?{?CY-|Ji=TDeh}}F>1iTx$1s)R zP)-iPSa(0q4Fi8$5t;VSBK>IV>LQYx zVCt4v%J2dmFjlCI@g3TVF6N#+V6;ig*NXtR?i8L%dyb!VX-J!S`2bSwLBayoM*@|z zMFI{GlE0STg!_0b9|n^LLI(p9Abi%kGYvZTkmIz%69RdG>dTj1*tUl_@AM(W7*qR} z^o>pi{W|ZgJtqS^c{j``P>cX7{b||ydifx6+qbm z)d=lNgbDbHoIrVc6}m31f&bp`7kIL}wgYY9XrX9f+F;oMAz!Necybbxhj~N{>`tld z#cFt>q4r@k*wuTBMNkE)Q|-srb0+j1!5a@h1b0wZISJ=i#e6G{HFE@1^=;Oz zJ!|&~+#fdLW+5-A*HFX15&Ri6+3$V80YgJWT?Qh!K5xzqIgivhHZ>t#?{+kK&Lj)|KGDSb1#0~{cTCN7klJn+GfJM47PE@CN42(tW(QXp!7>b#6nev5GK{Ph_iCyETe;sUW5 z;RdkIprr!W8ORe@W+w176lu0%hZoCvaDAmBZGOk{XJ{(_2Uuazr+YtmkvHQnRU?7M> zDS09_Wb#n6L9BhyePqJ0`f)cYH-RI9XvEa0GGX`wb_OuDes1wA(zv9uD5G;q&YIxMsa>JrSPA_){!Ax=R~{tJ>GqHm()iDV-lMu-lquTZTC8?yLh-+D%d zNv5o(55^ng>I3TIoFgyc;V}|f61nC)N+3$W^UlTm#Xn5AO`uIgOkf;Q9FZMC?-}oL zVR0f+BI%^C#)(oQX`eNU)uAg;Duyb$D#|K~DlRMbt+3b?*hSb0nm(X~N z5tC)@&syqQWP5IVnOniz{XOkHSd;{mDilbvGty$xR{0WO2Tf zAt_7AQ1RS^t5hN51tSpS2%|S61r6s_!d0a@P#k-lM)nX}+Eq?kv4r{5$mH?_Pr7L; zTe4hYU5alBA?aQbBC&j_-I9U~gHnU^Jx4NCGT0)tBGIDiG3GJ;v0r1cDkIe7)SfD5 zDqW>xf8WY-RK5QW6`NGL$XCi(t7wa4|JAAFuOuqoEmEjpsu-;@FL4*Y&%ux#7qqNa zOu9j$fOB-Sn)+KpqIo9h|se2?=E;!b7`M~+(hZwvN268)8$<{eF` zj#7}zRH20fE_?cL!LokfK7q@fXIe>L$Si}B6lMiU_THZ(JZwzlfhz|ps66r zV&f(4AQ5IXP#X{|v@+5>SecUHxp$pXq$@jA5MO92eKT`;x!ph|L3boPa=u7eDOe$} zr?+2rt-XNRUPNU;%|#YS*GsVT;c#i5zH0gzKj0l+{d{uGl^R6qPSJRYzM0wfY+YyW zFv$PrP4tdmOj(R8_1d-V>}&W}(8A&D1$Z7*#XQP1ae{h8lk32-^u1?8KUq}()@KSBW8$B9ymqht?jyf(;izjdj#(Y?<- z-F^Gs^&tE8wpO^j?+w*}A|^+j>xbK&M7)rK43n?D=xra>wo+ipqpVsk zGH0T*$*I-MY6*blEvASkp(X7}8A@#@ww5tEAi6A zgiaAhmq!azokR6nM_@*8c4nz`)9pUxqY_qzSmswVmyIdMJVyz8bt7rRM5Aca)CP15 z%U08$OZRrI_kD!-m@V1yDNk3Kt0vb|*T#+c)@3K(`OgrW$*VTVGeir|1rHm3Wly(y zwa(@yxj)riy5-&WdiR3&c~?8xVxqBE{OrCTJK>Xw{zS+5CH*=5hH~DyvV5@KPsXG! zMz8L7up5yRsS^yaqOW37IuhM~e<%^Of3BT415k})df0nNK>DXlMTd;Hn2#DG6{`kU z5$__aHS^}T&-r^Z0kHt>bfLG=tNMq;*?jc0N3N&IrpdNXzK_Pc#|h4KGwilXck|@x zWb{<%Bm;xd*Uqa#ZE5RD<3Ss1D{ix}I@RxF9qSMC*ZV=ul{HP$U`dT{jGi8h$7jf$ zb8w)ME1;Ukep{F!U9ROeh>xG5c?bjaVZ3+1mpvE5+n2!ZfaL0(C< z{^lXSVisd7lf1K(LTGZ@gHyw&le?vNGG|P7mE%JTXblkdLdo#Ofz8o>_^$5bv>#%i z6{1}xCnT3E=alB3Nn)?FvNT$7bZ$v6&2H=!W#+r8dHu|{RdVY%^m_2d`*3-A2bTxI z3uK3c4J9Np%%{^g?SB>n6J5JpD1;G1{=+YZILJDzI&gR;8G$Hcw{4wMS}#T-;a#m- z_r*Vsw*2W+HVcVRc!)yZZeq@F|A} zG1J5H4d(q11RUgOU@Sg5-;-|vdk_vbew7>cyRRRMzD%YR2Kl{}PvF5Sf zZr(@H{hTHpCVlP(x7J(j(bt;fc;pnt2+}mtavjw#Nc?}8S)OZ;5~od5ra4S6O}4!y zKE@s&ubMBecO8@5eOqG4Q@GU*mzS1~b4Bp60({0qgm z2F#`p`m+WcLK@SpGXm3<5+nPvryK)alX8Uwf7zAG*WGZ%r@&ADIv)5z8brESI8oGT zv}f$dp_6IAgCbaPwv3)7@5fX zEo0p3G{Pn=!gy0eF_e3qkFD1Oj`udDs;g_c= z2xaSbWv^Ea_;>Wo@>9EK%?>Kvb1gMxft9fKqP2$oC;y|nl;Wi$9?bQart8zNbLp6tF5S^dZ zz>>ADVbdnM3D;rU;NRK68Nf9DbV8%O9z=wNY)-mq`kd??EPH~5J_oVcD$1@eQ&mw- z(O>vVSnXUctn}`wJyq+sI?!3rB<p5BN41|Mb-O|+0z#*)0PoFz( zZ~ajj6CxT(B7Z}nL&ai#k52JoCm4D}J+5qSRJO9XL%+U(Lk!Q$A<3Cw$YkwtReFh@ zS1fTgq690JF~{HY9@1i-(40`G??}$I9yq`1JsxI=si{^;Xg{~uUmOYId3Jh=*zen+ zUNt$@n@75yZ}F6@XRPZwS8Sr6GIwCweak;DLW=N}cg}fhy~iR(@hkdxy^NOV50}7` z5KrIhQg;}5;c>*Xp?}XFoqrVYS%3L1Zkb(!b#Mc;SVIYZHQ+B&7x%QORk*x_6qSZ~-9yC$>Z%rw+&I~&C$$+>9nBOq zpK@1eLOyn>Nj`mbZ+>m@tAeG|e4fkmk!*GhopxKN2g#cf#Jy+_7UDBk!H?OjsQ{x< z8#04R3qwO3n^e>7gPW!Bi;A*f6~tL#AO`*~{SkuD6(Ai#wWXvM!HTnqW;|~{ z`eSPcNDV9)QEL>B{3iQc_K>m=Y&fnkY{07{w`05I^vGLKr%=049>ZG)T%FdOTAf%P z$nB=our{!4dZg1NJ*1b2bB&GkHU>FI52hBzt@<{`>Vk`c7vmZ;C*v>4CZtn2>$r?L z3G6Npjt;60YmeQBai+zNX!e))bCE`n8;}gpJgB_14@N==6+oG6Y7zIE$zmkmq<)A; zj@OK#aO@p~-9^DvM9@n9Ec$gwm8`#L)5vq?%G$=3Yw5jcvQbfL*i9zRp&9#^z--6F z%%ae^!lJ<3!lJ34cXThyICZfCKDV+~8_KKXkPF{+%yr6<>wInRX;8%4vhKM5GJvO` z^R45T_lNiWr_I|lgftjEq+>{F5O?rkNN$u_w3pmr1ao*ybSn~1T_o2QH<9P_JRgdL z=Tpoz?8j##rA2AphA#@Xpz#*;nm^2;u*puLMhSIQ{3~8E2wfUg<9=i7(Kxt zfW}~E-Tn^v-MJy=*5MBSV)U~5nhLH1vjmHWihx?XmPa{87lNsU_Dy`NahJL97w%8R ziYOl!!>duSQpBTVY*KgG-QV=`60-)&cy@OS-C3d@+eMR4c!*Zftf9qX{3BWnP*n*?znxGoHhoDD;Qy%ekc7;?*^^qn={T#wWyR*y1cU`N(tq}+|)d{6yb>2kT! z{KL~ZZw@b(6C8hRVYeBkRwwv!5wmi2!?e@Bc3=P4&f3*lgm<8|vbIz-{cia%9`q_Q zGIn1yf4q~MkZaCOU5aBnZj5YrjlEOzf0T41Bn4IX!PVA!CkF=F#R4klva}p0v$QNP zVqA3t7PLI6{&qAQYxoY2(4CcUo=7xWd)yxW2G)@ndlW}seFXvn&Nf$8cT$&;<~Fpo zrq?&JH87@kv$g|VJpcjmx^V+ut&N@Z3Eix%Y#h1W_=x`_!3}u-*UUgn_#Y7`OFm+C z8F@kxTL)u8HhNZiMq+*#LPA1b2O|@1#h;@8Jsj|lkJ!w~$&Qg)u? zX4-n2TGo9mQ!0^N>{RLIc0OM^q&$eI2I9&}th9TxXkd||tsOv-LS(QvDK_l_X?QNR z3Z7T{ldWM8PL`tX;TBGkp5z5SvIn~gQ&KI;QxA}(t$nyb5#uHLf|)sPnnRb>jdn5l zCu|U25Ox#xV0mgW(H9`RBNruyRUK;hlTlR8^;=t8V)>j$N5CCdc2S+SKjPj^TyB+2ZHl?h!q442;TA-x-6J}5Z{R`R^LpnSH^$to zyD~j#(DJ?Q7u4~+9s(Tv+v#TGbpdg%$5|PjR#Q@P%8!YJq_l^`+z(PVGB$GZ;#XA` z!p^cXb6HtgH}#g@4yiwMo<(b;I!v{BFk>1jztgDa)1@dz!Rms8S65LZrzqL#;uT(= zn!CMou`Lw9R6B3qa4aT9!o+Lr@_cv38-jGFeIFOqx}O@Wy^ndeU*DFyzqZ=18ylPG zgr-Ar_`RMtT@}3gL*V6m8M;;S>1Xit(q67yyWR=DZwZjxPm5CJQIu!4r+w4kX2G#> zv6T1UUtbkCR(wB~efhpO?%$s;m(kwuY^jfxre+X^bU6X$-a*4cdKo~Kn}M_*=SyLv z*3{4_6MEGBepB-k{#=VYxHE=1{|R&^Ab_SV&!8yfap?pT@+{~I2YzDi`#P?xsH9|V zWuK3ru8=)VMG$g1bnjo5x(Br0PZw& zt)?Zmiy0w9*MyB$NeuON_zUPdJqux#~~csQYI-Wsof@g zEUcHg2{SV@zb$YMeQoW{m6esrOpaWiw^QA(yHss$?V*i`+1c3zUAUudZ_GhZP*87g z@9qQgU}~@L_wDb^Yahr-PHt|P$+U!oI@fERB$znFo{kB?6)Ulx*~$62(mu&Zx5uM} zi;Ih(V9(R#`tJ34b@$f%{JownwW%rG-Q#hAE+>18hu7*U4E#)gTZPZoAyN!?QEPbpB(a(=yT)(+4i`;{qw$Ap7AC`gdt(EROn5L~J}nINcp{wz z@u}Fs!6885moNQWupuZ8zLlAkmDkg%Db>$V8%s+|SUd|iH!L3_1YGLH*;!;<^iP<0 zfV1RTLLPG1xuBeUX^-Db2j1^X;k;C4%dLx|#%*seSLZU0e1}p+*sgXQY9yK};0kUI ztw9XhK5u<}Ui%W@pu*lho-g<3K~zm#-vS}PW4#?D$_aP8h%!MfEG<;&biM(i0>MsE zNija;<;CqqOHuJ|&9b`l<8HhsJTf}445IWc_xm-sppW=d)TcwmB90gg>tNVN$aL&Z z>v;6n_v;xeS8~H+MM0()DIs2VB&Wp4@@|}M;P`;UangZdK$}_m*Bn6AQGpiH3*W=Go_MJ{RP;?%H^V@E~tpBDR0?WloBL z@3o!+?*gwhpkb>@s%o60>lWUw+8Nrfk)NM`7&peh`erYZft;LFQDRnM*7v2K;Ok!C z`#ziP8Y%p9j!(VQihm-MTf@S*S%eA{CW9qB)b6$=Q zeofHSMYSnMF-1CqBY9o|?v4s)$0S7RX&>OfBk?3jQAfe;Y8+Tnv~($X`#|0gvtl#( zdAiCfD$&s~@DGTBC?CSOoW7sux*(tGp3ae--0X-D^6T9XMdK)R)Yqd{+}_^@y4l#!Pxx(loL4IIl2TBJ zph$ZWBH)XPi9r%#IPLWH31bZd7x_WA1_T5MUIb(6)HF8(f|{B#NCEMU_r;NkiK(%% z@hy6zM#Cbm&weDf_77*>9uZt6#agn&k1_rq7`770`VuZ?kUd_8WqZ`F7{iaRJ)r6s zV6TuuM{q+qXStJ8@=J}==#V21sWvt7yBKA}B9@jki{y+C{k+I~v3yS}>$ctSX<(^4 zx!)fY69uIge(pp>M2z|#0B~Qf&+yf3RF0@iw4ezScwA6o!4BacvYUSkp&q?zx@(QAXAxjA$yO3~GJ z_xEW@uB@aa3>;jLC8V>ES0k(|qAeqPjXrdKNl8gZ2kuevj~_n(SZz_(1N_C{a|^o= z2nPXnJf4c|?DD;E6hXel0@VTh38pjXy8}Gd?sSXdMjeKzTG0BM&Z~c*@H!(9^ z%F=!WGX3)w%Mr|Q3QGh6C;jWez$AYRDpK`_#Q|5RTy%2iq^Y7L# zIo~%W0J0}Rg#cG{wLfVGs>x#x4iAdh?=+U*&K5YCOO$Y!1t5aY3D1c^egO^+wm%{vB#ZC@TOMM7JKiN;8$DB- zAUr(0UBCK8lizP~F5p+^#|IQSTmfKdA3g&569C#>X7jifC<>wzUZv1!IVIN_2{*qj zn*&=!3;C$Ime-(L+3_F3?NcSyy;UxnoKH09RCu}t)(*^}P;ydYaYJp4+MR!$>wXuw z(u9FR5|NMi6$)8{Wie<$w3#w>@0&uBJPP@=mud@Cx_iRIi7=jJb2%Oz%YA($`g#Yv z06~0zJ$EbM4#Cz8Ee~UU1`}bONz2{cJ_-3&R#xUGet#ZzlLWNvGl}iIzrP1!J-Gkf zu-0k@KJI+p3e?}si@)||HH;Gm1bQ9$*H!c&V>_3sB+QOoRhA<;8LIf`Gu=T#Ft~YS zR$Tn#75I_rD&gzTJR;q%@ce&yfb+ym96SJ6yI!WJJCq1(a9(kqu&lHO>N9xvr7swE z$MGAGw?ehxnR-pZT_r0C(*(W#<%mmLUmR={Nv2%iuUFIb{HmsyI!PJOy1%cg_4L*z zCMJw9O1{>Jt3KDB+kxvnJHHkrckG4jQ@t6=Z)3S|MbwMFRl!DFU0h67o}RETZ`my6 z>p_7(KyOX}78Ttg4z%9V*=hp=`T$B(;N_;q4k|DION2o8@%^>^EyDf*;M7AHM3Uo9 z+6GSkdDAv4HNeFTXx|0HzgWHVVYRMm!IFZ-b!_mLrczZd;qJL^3Y`H)4Pf`ZTwDhF zOBG-a*=FwO=+FyMO8A#bIh|VV-e9vFCyFcuLyD1>@MlRMsvNKV?gw}a^sbsUg@AZK zhflD$!z;7k%0jE>j-AnMwN*ib2)}w+?v~HHwVz#Bk6&2U_(YWS3+(4pq8z^v^9~Tv zZ!uqes4oCHKb2sd$nREFRb{*dE+Ob3BeXNVt3C!Lu%>`GDHsc$9lNgER+8fbzXMRa zw`ecd&nN&r8fd=OK=!3Gv>S3Hrlpl zU~nh9I5`75vj$Qm)N1kNA20R&e)dIu&b-pP1@O-=KuK2m+iBft&|j~>&*8M~pDpVG zt>2$6=gENLu6M75w9$~N4pfCdIJ#da1-4!w>wtyz1PSlP8+HC!5>c2w2@ly!)DfzU zu@pQkSlq*dyJ-RgMUt%Zeu{??b3tV+LE^sH!Ol*Q!&=n@V@1zaT10e`xC`01#_&IpR2=K*aQ>Ic=fUU{h8}SvRskLBo20PO~O@z?zfa6 z%0)%k9xe1-0Z!B^@0Jm_f#N5FU?*W79Tb;uo`Sglqw+BYkZg6`57F6*H8VdB8GM1W zL~aWQeu}r{q(a_ydOimT1Z9l(Z{mr{k=}24Ui+(Q_V1UK1w&k)oNzk4Ft)ggbFtQ8 z|FBIiZUWTALZXsimy6}SGOTWyr}?hi-p{GsA7mTiXpq$4F`EGLKdZ~vOzihuYdBmQ z_0MPuRf!aGXMg~dX7v2(MfB+@uUg80iSym<14oO6LJTb!A0MAB`WTh-37}^p=1axW zCiL%%yu8?(ZD?*TQPdY@(GN**(i)#4 z3gB0tvwu#Ct*y-b0-CJ0q*W5z&>w$S9B%8;);3U{nb~%4uD1{O1>8LXFVl>T2L=Z0 zq-MYiQjh$X5f1=HEN$!@XXgCY@^ljPNzA`l(z5-0toEH8ACHWT4CGA8NJ;|pvQzcB zjnp+VHP!8KL;e7|koYc=q8u-;?t0q|B`9zc5dmGR3;JSbXAju_0+7hQ54X_KU7sw>8&v~G&JlPc`k-mWc*6dDI^<=Z`#FwtK@xMb!5J> zhC70cEL2Yj#FdJlDteLP6GrcUdFo6Oi8C$+4)i*#dMZ)IHIa>fo0?K=l2xr41w8k{Ddg<|?AULTLN?1xQ*>l< z^7DwJ8@dPd8T2E#?H_Q1?)>z9+>QY7@ZcYyMKD%@lBcmEg6%608&y&WYSlX47q!EA zl?jQ7Lhb;{A}u}fkLgnjegUvUo|hGE-Az|h6XrGv%}T*^y~)}Rnh^G3;Oxvo`=3J~ z0jL?EbbN4}=7TKjft>7-laivLr1X1-^s;QRmX?vR-E0e%`~Wcj$8z0Im?LRI-VqEOr3`X3+)s-w&kp6j5s*W%X zQ68!uXquTV@`EEOD9Qe`&r>~ssN%leXWDjY0FD#3M>w|A*~Nu855z9=nVv^%qRXfD z&kx7GCCD{`DM|l|ydS|bOz(W8W5=aZx^}UAo*I)~DtEU!HUIc5!dV?rhJuDxutWvQ ziN@h5aI>LF&Swi$`SRkc5X>{Z`R?71m9|2#d846KiYd5A2lHGfhp=bYrn%k_UHrFK~-eacvuHA2819Bw2%y4^mV@g6fiTAz?tiUvbLeG%C2G|Rp| z;_Lif9wPZgMZbbVo0^)Aj!X_R1b6OV8FhfL`WXg<{3QF9`7^2DA4sW5^b|ETew+jW zgQpP!891dcEvaG!#<2&AcC}h~j6R%JrDqG~T98kwL z_ZI~Xg&W*05JqW0Ne1Ki@lo*G4wjg|fsU0VkHqNbBvdyNAUTNjjW6Dd~<)J1iIWPOt2#X>?bYpx5uP3x+I}H-aHx~g)mse-tV0lbC zsFT#>D&5Poe%+QNJEahjnqnfWV>SMHa{&q9m`ycHI)!eL;g149}oiuJk9=C3g zhuGy3HBN7~wN>Eh8gC)0)hP2=oP7 zThdhA1Ry-+_2t#oh&+MKzB?}0moZN<#Y5yqC{1K9G)QUmj|(t`nX%HPRaGIcM>6ac zHS%97&?DUprl2^g(tbkK<>lq2rKRodID0g!$`^XG)q*d>=Spo7btt7l@K!GlB4tZqXeO9z4q3Yhu_3F1i79b__nB$K8Ph1w{$q zXq=0OCwC|i7Jq67n7GHk5S2o<0xA;^A^mgG;TgG|?7*3;$$Pk}k>{zS+xq!Tn>___ z=xcv{+4p0d@2Tlo?Dfm~Tj%?3-BMSl{VK6j)ikSu|JCku4UwbcdsnPImbPS|Kjnzv zlDEz)^RlAJ=i&D1bA0hnyAJMkFQG=(G3NV3%ogX02u{?^Av5nJyQJAH{&zL@U&DH8-@7MgKL{qOio`L~>C%qzM5 zi+8upam(+<>8ly!^K8!x+zvim1of*8SG{8%%Vld9&Mvq~il$2K=G&87V=Xs>_3uhg z!{PkHvsrBhS+|=(ssR_pEiiLl2FWbVK3c=xA`LcrZ;s90w<&kO1? zPEuE-Nc zPo5}K3=pMg67$9dhZW8x#|dCkB!E+=1?+HGp=)>n*F%hqjFgm=V2FTl*LQ;&2L0&= z>IFz0kT#X)Tl?2l+=ul>@WAvsITU=d-Ih&>^|vSa4BI{&q1$Pfzb_rTA96Q8rej@l zTJyq%-uc10)|pvz>w8$Uw3>pCpFYq3G^)ltmv(8M4N647hQT|0o$H@-AZR&MR3dud z`VOrn7#<^`p#n)r%%&pb)Eof~uQ_b4vMAVdqVDT%T$%;nBCdDnTfat)y9W>)d#+tV zCHM~Aw&=1_RmXa{;?`|k9E%*|I@P=_>X(}$5WJLUH(L8Kj6T;pH*DF@8aMazPxbQQ z;#h_PT?b)x$NAj@@iK#q+=hV&#S51SxygrmflS-YEs#(gs1!;nX2QfBQd9aV+d~!G zd=9PsY1EP2d^`0jj^|zv%@@n>a}L250k{w|G>FrW6HdYK+Ak;Og61u;h=?2S8VEBo z!8ZT^VDSzN4h{|vQ;?F9?h!#FA^{_i{t^}C*RwSAYO3V&oEVSYBL&m)Ho1?ie99f{ z*)H8zW$%7T3gZ#-YOW8izsDiCI`(S$#%#i;SFYmhmg(6z^NK3_*cjbs*ze1d>wcLL zNZ1($TU7^KUiS*rt*wre2{Gtaf6C@w9^)e3D1wGL4nI}Ct>BtvAI9fVCJ;FHE;-N) zZMUpHopepdww{Wm@2BuA*{ns4+iEwP(;T#+Nr+@cAHCDNE8WfNh%H%ji~AAEAFRsY zG~++FM}57u;k_FD;j)=S;Aw_+>-4hb$nf=fE4;K(9=MwK>4LaeE;3DgZ6h&__iLW- zYQ%BPfuCDv`m=HQeEsvS8ISMBWJRN9rynQRsY03BZ%(nw?dLW<=d}#ShnxKIl3Z?! zP6}dH3cdxHo39gv5-5RhLQFk==PA?!rY@2p0SuQ_iW}Ag@2P&sV_kb5S18t%;J05x zZnnVbN;YL!x&p!1_BCI)G%prqW3jgA^k2py-=P@h>1_?dXXvmta}05T1+Af`-By zNcA>)kU{{7ZTEOQYqVTu20XWM(V@7!f?%9+Nm*GRdNMMI5AP@5*CS}?#}+R!(M>zm z*F8hKN%QRsdvG4-V{FW7q$!rm!Sk$#z*EC^Ozi?!+;399kB^L^d|%V>hPJ&f=rU1# zm6MASt7DmK9CSMqL``*WKlbX`j@q-lI}M3>5iVAmhUTc?_d{_5TVA_Ze02OVFPGD8 z-)~;XI>)Mm-rHK+2|!2jWKBCdH#Qh_#5*L5LRPIeO>nRZ66CrbZ11f-I|ITzdp0ei zU*kD>eGYL4nlCwh$a(wL?;9R7Ds^{0YEavoD|?ee!P>62+N>w9P|e>imdhZ|8WF0c zMl_^%(g^fLJPgEP0{a}~dGrpicrZ`!_JS8}HZd{H8kb7dJfKP%7|A$Jd5;S%ZS*Cb zdTPHP;i>4Px$Vwi#|K&hk|MJbb+fusz?cP3XRERjhlL%KkiOlpdt+}zS`{U$Lpy!$ zBI#z;1pDEoD|tpB4~hwyHql}u<`a@)sd)V;lF>+0(FRtzz4bBh6@JJ4&dN=~@QHAo zyVTSXw%GVp#?4B7urgDemAy!~gK|PnKzY{qOym#h<@XI~Y2o9xGUOY4IL{@4 zp@qw-l|{>FvITA##xuW%(0wNvK|kfR7Crclkvu-qIDH(@h7TDdc5xV`Okqiy3op`; zN;kFby~WMOa-mtL=E9HN=6v(GPVl{&vY$J9$uJ4OR%e~+EYI1ObUs_Mz23yY%TvU7 zHQ~ALk}XHdNI7J@4O#L5&!NCyeCg&CAgZ`=JMGH#J3ODIy5++2+Ogy}Ek0;jt~Q)# zT!Zg=6`f6n@gSGh#o9Ga$d}2Ruh7Awezy;w7X8cc`KyP;GQN2=K` zE-lWUtu3D2P5jOLQKZITpT&TlqSKCjDN2+j9gZBMxUy1gxzo=Gk0}xs3?U2-Q42#Q zD;^t_6i)>m^v5nnmO4ljX13<9rW6@%KFlvkd7&WSLI^fbat|rqje<4u=)bA-pHBBi zFv;<6wZK0JOVA~Ml;vrZcV}y8rh{#H{W@i{G50Xm;C3QAkzYL25OiZ0|BvaDH(Q?a zB9=se4glrZ2`veIsurO7Q&A~$nW3^HENf|b>CNz9VRET=zmVak=s&Ah%9@_i(4S!L zCi&aKfg#XH-53?|&DR(dKTf_Nr;V5h;!q_#_xKYQ7X5zJan@(i4MW?@`^i+@>&QT; zIXCmly2+6t5n*_9gkH)%)J>U)D8;S!$gtV2Uq%_b%lud;bwD|~u$(@{Gkf7BScu?y z<2*h`I}wy!eUPYwrnAoQc*~JW&Do6bWdlvEKD)}e?Q;3gaDPZbLt9pkP2M=;dOqpY zs#S^19{fLRPF21YoCN?)1^czV6*QPFZ|h35srYVw71UooW}O8PPJtiSL=eaI4parE zS^h?k$O`{U`eIa7prsPdpljDOIqC0as4Zm3N2C{aCu=ZxXfE+r0wnlp*%8b+nDY?- zk<*!yqr9vsua>-nRgsgGgNKJ>xNud2^~^sC7uxWK9l!2W z<1FsLRC-byb$qapn$53-gzv}jOf9<}XsDqopAZNyaJslaZ#<1kBD7JBF!)Un-#)y5 zUMPpZy=ZwSCvIY$y~tx9&94c~w70_s=%B2npMdNyU&^e`W}Hs86l@M**f?JjT7>?q zexOn@4pmnzSxYy0xVj5L8=4zUHrPmvro-6kxHENN|A;Tn;StsC<|Gix+1c5PpTK)9 z{!NnVjg{Jt5Zdp%H$yWsrENd4FhLWW!gl+rK5O&p{V!3DZRjAw>Vhx|!wuHJbXSV@ zVAP-Auk2}s&3L*p)2qu>2fwyy!`l_G60!-R70abi%H7kGIr{rWbk=3&|3p?#`&1;w zN}iidjGb6}BIHPn_c0c!22-(};^REwO43q%nYiPvx-l);p{fiAG~J(SU`w>7RsaO2 zRrZIo`C4|Z%=QjRaAYBnf2mPiY&p)5^U5goyGw)Sx00hy+?UQ;cjNQ%yFlh!@SmE8 zW5!yoI5Jmj>PA~IGgz-UGFC-x(TdGcJ1@b4apKV(MjPwnR@WS*++C193k;OFHYDLb z+kX}mmi{4|o*Pd_MRDouDy*eGWTC}}H^2*sdPIs1J7Q0=lPb`?b?_#Gc1U(@K+8q6 zJ9N{IIl^ezq~1*-%bA+!d3`H;X&^9*EJH=xrku7crhuLkdc933csj}yEYRY>?VMWK zq%=cKg29Qjj0oVo^6z*nNC5`VZ9V!dlO0sMC~9zC%)!2~)=d9JS1grYv-TnB?-g(52PDJnh=@y>0d z!D6G-<8($2L*_(Ho_z8wI8>w14#Ql~U%p5af>9Vz>N)V^rLf{Rh*!#)Bjt9F zg~Gr0J%qg7$=1`6d=gXVS@{^TdVVy{g>?m}~I?b5s1;l>177W0N~{ zF#WWyGe$Eb-nMHAxz>k`ZJV??VnOt3%|XH+qWHA_cC?)rq{Ms4zh#RVmqTO*=1Giz ze@}_3hfTk_l0(4;d)Fzjbxk*8*lok7H%gxS^Edf9T#^rW#V_5Wx-7w?LRWk1+8vV( zCR+TBf)br*^QJIlVVr=rZ@00aD#}~FKPR;i1nl#vY#e1ll43w3WU4KDLU~_G`|HIx#0;3sx?Q3+0qr3rPWaIM+YrpN;Pi1stTv zn3^8%w!2~`BWu&1FazB~t>x1Qg`Q!kJca%BSTC2?J!dIc-*U9*RJj!#Ta??`2Av@B zyFNQR15~-Er>BGc*8kz53v+XKd6kv2JSjHz6>;om7{x!o5B(@0PyQcMZyDBRw5$zN z+@*MNZ*h0m;$A53THGN(akt_Q1&TWqhvLEA9fEt%VExj)&wIXeOQ@ODGS*FQr{t z*V(|FD_$VbG@!IS{j$FP(uw(#G7cC_xup}EQDphOkEFB0x-|P-NjU+5{z+d9D;Xv~ z3kSHM{lQdL6t)fpNI{dNo#B2)tl5!f+qvFWD1C_W+3KdPDoOyAM-B{!m6^DLHMrT1 zZyzP6tfZXpWA8QpxPGSPR#hIQ9YT~$$Y+)~g^PPZ%^Q$Bnx zLd%Bsc&>lezko)L9T-vPdAzelvRUl}HbYhuc6B#Q7Io%B&>_L*fxP9B@P) zHq~`VE`w4k^Pv>Mcau2d4|}F2CML*OURN+UXEBzquj~xoSBPkgRV|i&hL%kh31v;1 zZZLe(uVf{;Kcgi)tPt3r7l!Zks*o{EHvk*+9~=++uUSUahw;=sMzJ(R1ttB2Bi*$LVT( z74s0-f|;OSNpHV)x`%{XAW~g-A?%VK3!9F$7q*pEtWy@$*obXI=z)~7qcKV8Vj*1F z=2-740`PRj_%!X~DHkmcp=}26D#Jxen|a_wJV@KMD7QuY*5~<@v(q48TW*>9h1Mpo z+b+ak6e8)`+boV0`3lT{q1NJVD6pZfgdNDB7OTu=RbNUC&mF!F0oBH3cMwFytK|X%lXm9=%ZY_Kw z^?!9RU0vYzPYdC`>*-r_&+R8V+m9iTi$|}|NJvQUwl6okgoK5Kqa!%}DX7x{Er!iYyQ~l>!j`qF!XDk>oX!i-qL5e~`A*X~T{TyuD zi&_tH^lJ1T#5#LAyF6qW4Ny0=&^6r`;Wm*>Io%1E*;CNayp&px)r+FZwJ{#y=3<4- zBDe3a@6iSje(ymTq9-c8xaUE?o5yfpn1=x+_pkK5M~MJXXOIh0Y;Z)~xB&n1N2*3n za0k!*4eq}~XlR{Lpa5>`3&CC^l7dee4(aVf`0aWJ%mI1Z{aWIRGrzju|DfqL?GE@s zoNv2cUX$Wh?`mOstZj8nMPHp5c$U$>E#C7Md(<8F|L>T8*<1vzoyeX0$gyn8eEKm*)odPMzt4rGDX z?U+~$6j{U%m+LhYM>W-SRDq_MiB2a%HABNxfpL5Zn2-dA_#d3xnQm>Kc)J)9cp&rf z1FLx0DXJFo2p=4GzWK{;(4?qmsRwlFQ1&X!{q`_inX0lfRWU<1uM9v| z5fQ4f%wALq6)0JnOK79(hrGZ7LTDX@EH&u5|BBlMN#N3xcv;p+dHvZU&3`XK0%*V<_Zh!Co5wt>67jY5(w2{8P!VtdpWgB~b zZ7t>txHlEaCS9SvR`Gp)8KugM2IV{j8JXcu|0hLemxGcnrpyB?-|yJ>{hveAo_fh7 z;@_ZtqvquAU>T1JCQOqxqkxCl0Y0HXXysBG2){q{&qd{iyrzC)eKhL)m=g0HfHF{u z%Tnjyo3^PFMs}|3A%la1(2Cw`e2%ThV$%*)Le2_0F;krn+%RA5Z!b0UK$MK(TlU>o z8S5+J{wP;dFI72BU+L|*yyKF^^pc2dY*0SGiB5V(K(Yd^2zBbT&LWd2>9&XUR1jFH4IMZ)85`56M)|`sw4sqoHRw1KR}s( z3(khd&1u82N??}G&g;t$7;^51!c)io&E& zGfQy5q~m6K?*H~h^W_`|U^00NN+LlK9wIz&$zZsh-VbP+V%5WW(J{traPo?Z(kC&_Hz?BS zdX}e5=FBjbhoxlD;#FHDC6ts%inq7{4s;XDiWt+;q5k_%$bbLSo#K|CLPE6LKOyWz4h38q(@DecBf?_G z>e|}!>?wD}X?P}O_9!wR+!L8j7XHXfRqk(QpqpZOdFHqm%VoF`^jqi|ZOGZj#n247 zW_U%6Lu8zxWAwW*$u5bZQO40_cteWk36q!6D&ED;feYF3*#X_7Ubuz)-C9v{)5&G( zy@f!Sh5XP-UzbZV>1&vo|BDZY7*`+R@%3l6l+PGPGnPt5k)BEZME#K{&>#tTps{uXGHPCTRXgTSegkOFSx?fIGjA87 z`$rP4e0+%FgCdP-OG{q~j!qgjgvivCIR=fs8aK(O;Vy82_{vpLfWe>(Xx!R|F|>HsGO3VI+Ggx#C>g! ziHtyn{WEv1PLFh=^f(-~1|+!Q=g(afe*l$Zk5kfjhAM^NC%qxOsndm`vAp}$zF7^W z5PM(Nga%^+)4ii1hC|k1Jif6|&aU&tHA7Is<9V*Iqvw_9VFp#FKff6~%(lMlUEWjLO|joKl?#X?P&q zBHu!ljrH@>c*Ri~=C4j63~>4V{EVZf2f3O}dm8T{b_Xy0hkkI;bl+RWdR10OE)x>C zobT3M;%$P28Pqs1OHE199vc9ZyF9K>{EHv)!m11$zK<@I@&19faUCp*?p>Vwb!~xi zbS7DnQXUPl{yieA88(n)G4x|@BE|XHdsgfutUZ*lr?Fg$Q8~qZ|C6#R$Arn!xAr@l zM?xFsKKuR31+U;*M2Oz)5e+~Rn+3Z)m^W;8)6s@8d6{|^12RyQJ6Ur9*0kNe zwvM7e1YTZNm{R4_rKKT4ru}t+f%9E2kyA*e%_S-xx6OEnzTbxvq=34_-_`gj;HU<* zTKcdD6zT>&`A}iQh9tYy3=6wmg}{<9h4tsKyuBVIG z^8RHoWgz-qaTIb-KE>WpC?L+WpK7c5^Vphyjyn1=$$4^7pB}_a{-Lv}@z#o#f!E$$ zMpE>(V%Un3ynY!`9-+4ykpB=gHya^yQS zLGMp6Wsj2eS}EZoT$l%*yiC6Y!}Y+pF%|PLY)MWN}(`_JP3U3+U0LbM`-Ky8a_Feun3ZF_-Gjij~#Lk%dNWD&#utrCLS-ezw{tjgJ+gDoLi* z6F2{i;XN93`GKj%v!~2GLoTfZ1s0CREn3yC9i{4QVKJwX4m}ql zys9&gg808H++zEnf+#1}5HtqzQXHxi0cGhH5aGTvu9$Ed`dyH~(WvC1gl=v#pXcao zx&?FmN$1ebSK05PJfNDk7xlbVl~9pG*5Qm#Fox)aE=5U1OYXWZaSD2o4Ahtym~T_H zFhUiqx$H%OwT@5Q>X7isJYmLiYPlyJdP&5qqo*eUdbey=&cEd=(3;BFpJGcl8QlHb z)Cb@$kRPTGH3&AS-RiRChXJ5h(5UjmUXWA<7@{bwLd~5}pq~P*qe|pHfJbV>_r9jZ zMBZSrecT<=EH*-Go=@dQH9(nuI| z*pUNl+N1ZpdRY5(Bq5%%$4k9A#^K~~5Yz@^ffyXPr9zp{ojT%-(nn)3S))8j-T@qO zCKg>ylaftLg~~Q%E9j?3jfqo|qEO+^y*2sK!@HSr#fo{Uu4nc}VQgy6wKCKEBB?eH z(Q!HDRsozfcy|+4zyq_q3};O=Vf{8aBw44NZ)N zX%v87n#3_;SDDJm!*|8d@!mwHAyo9ewaLcCzCtl!8W`UTJ%}BxpyzIEDo6j1q@n6ZgKz^MR51g7hjwJVZ1}$h@8=KI5|ww*muWsn zLZ`vR!6gP3w!JyFfK=ojHdI#X%4BG(SZa`ffnxFRAkv3(SLgH7$Wamo&<5Ej6k#c& zGtxO19Vxb4Un>r6WV~bEqhS{1S2ymzsTYGMJ5#K(37$E53>DwA%sk`OztU~;y8}zp z6+h({RU-jiL=B;QX$y z=F-3KkE(#y$uv52a@DFa$|og)cGen>Riy>%Voc~lt$b9XrGfJPy6ZlyWtLq_Ea>2= z%_r`w#q92uEZHb)NdF5W4=~|AUOTaJu2IP(uSB2$@53h-=O4S$@5C1U_je10ybxt& z2RXxq$(*?F)IJ=IA=*g~vxHR%_1*xqm< zCtmTbptoGD%`u?{b%q?pS z?Sm`Ks)*2u`1kP0o$eY21NG7`c3>{ztz6Ci4J%WmYsNjkwK?{ zfZ`5oAIv^;6p{jd6E?p@KLhNe^URD~Rt`H6V@vzr?_Tbk(KKhE}@ ziz)p+i`9A+7USd=Cz{wUz=K2nSd%Xz9DJKZ=t&hQO0F4){W}>cah10pn~qG!LsOI@ zhAI;lo!4URi+$v(j6ru5?-qh zJ!VmQJ4hnsp1t7Zb3*9?l2obA$sC3V??u8w<~B6y?S{MQLFxE(aGz3jOWTl5q z-jK*&j@D*CE3?#L!t3a{gba~AbrH$JEXfvf;&|~ne#em%^hoX5UzF~`d6`u_d(NA; zpc!>dgayVXV@ERU?qWId01c7XuidZ_fOfC4VwTP^tA$=& zgq_DrHdh(ly#xWZ;sNbg?OChvUjE4SdiI$NG;EYnw#2BHN67 zLZqM^+iCb@Rj+0_5_VuMDMMv!wqQ`U!d%e?Ib%8NH0IQ5)2Ap&{JUr*NuxZ>ZrRhw6qPaRaV(m>NMaeELx#!b4Ah+e;SMPrMLC|9P zZV%>-Zv3?V-$r$TJ;RBrFZf%yz=wHE2&t+O8wNPFvC$Qtiu-%<@8g+Q^$F`MS9GvH z%n`HMhmW;MeW{D26lSSw^EIxz@wdPWEiw)+y7aXKXCx3mNU3x+u&!62oqYvixpGPy z?jCr#*!H!Go)D;91P{%EPemHJ;Fxh9+%@13YPcEjCAu$>lf^dPTicmwE8c*aXcK{QD_NZ(!*qGkqDnjnKIga&QJR%#H%M4 z%oBcJ{18>oWf*t^m9?^VmT%KMY;NjuoJ~{RUJ)lUk z2r8m~2?@{`5o9kqW-Sh#z-hdk9@|tra0LSvh_@t-n608m1S#5HW|yC{r*o0{(>a`y zPHP3usLT?#sM`IxHpd%QOi(wd5IgYEcTUyy?(vEw~~mDMkLeozdD$biNR?Xe{CMbJ)`O_j5~i-y)z2*^?u4cQA|px%dvgX;RcCyq~&0Q z?po>Xu2lDDQ6YGUS2UmZac`3cB$S=&&WgS`42m^E_^1ZGGXl z_qN%lU^-ZIa1u?tZ~(JPW>$7~kfcJpi8tcZPn+==ZU*whwL4CAW5(EFMZ%(4NRSCT zgBE*v1HqP0-B5M}@t-C@-lk|Kac0Fm6?$cUPN~$}J!Q8Yqq#yA2J@ws1R2=3r@8;- z3w8$-i2*>jWk&V4F!*J+igrP=>p;EsW?s%D?s<2t6V_P0WmbU)Pd^U* zz0covHWD_BtzgT|Oq%={dHORaNx}Lfo$e2IXU3C{3*-ZX{m zA}7nzoM@Sb-#6amZ*Blan0uyK69rRASb;2I92Q<;gz8}qhKm0GyGRV+l6RFo_Z5@% zP{buB7AAV^l#Toc3X=5kkG4uB7T*9l-{pZH3)v(plO;K!@TU@EI%y+lF8{*A3n>_A5a^Va?0_7)2(;dli2E#Gz@*1ta}6NXbkHX=f< zr11R!G4lRNsit+Q~)&$RZ%V)Vx4bcL| z-24lt<6Q2aiUG9Qes8IhYt&tKLaivKGPyr3vzI1RvACwg^{4`WJqX^n>Ep||GISSL zin_H3%Bz)5{|L?9AC8iz;I(_+WbX4rP??ut();q<+&0-xW|P||X#9Sz$XK7iUlU_h z&cyoq!^E+_K-}$R`Wog<4B(T>UA|vx~H9ydPP@}Vyk%BCrX@wZ(i;$?T&Z{^3S8-(Mr4+t{;RXy)Hm> zlcqzh+=!wWW#7~q3v__4v?oB3fr%4HxMAE!EMs!`S1W^{&eQ~ z5#wJ4%a)|~p3#BD?oyOC2C9sUpA-iIy936 zs8)?MNd3+MtxI8D-tXGe`yLNJi0ThcxuMc~Env+qI0K>Q?@2m%p5twA(&_ZIDpelT3qAGw`C+ zV32St8Ab5DSgQNu+}6hI!p6|T+-5(YD(%k>aF(Zn%-8$L3tn$ahdP6cwcJ+(M6B$5 zR&e|_=&p%q<4tD&P=JMuMOLD@F-Fza^k)x=RYhaZNqtz2=k%ntcz4~$@!6I1wIzq* z^gwOyMNeyKWZFF05r;Qhq5$Jl5FhuUFbT=aH=Oju%W;XvF2=utEsallB3^i!!5m&X zsgKsC35b0sjd^q`+n3#lIaO7&7efb=KkgDwtuT1iKkOVLkJh^EnGQKuXX;NIJ;RFzFk=mdn}Oou(X!c8m2CLlL~LIZvx)8XdC&ZzEm<Oj;k|*NcO}kE2?caH%A@mLO36UMAW1=w-g;FYKL@J8{ zZXUIR!H?&RuafI3Th#AVbyF=+8j~~3x)QfGjP!N&w1F(juyivOwCA3T;oc?tVKT>R zmVbX%m^o^j+WK4rQ-bbOJlX`Mza8aq|9-`HsDT{v#YV@0C+DtCceC=C@IZe2noBY| zLPxviiB3__!61U361b2FSzn02tu>@n+F>5Jm6vA|9V4@5n6wF~>&WkT@- znt|}`3eDEzXl_5QJK*}gB8G=)H3V?M+Qk{#a?Bx5hx4~;;xP<6GE66&App%*jXP^p z##-O_HlYL~)_vVm#|RW7+r|{D!+|5U%iO}ZnWP!p%q)spBjW}mcVIdWOf7iwI2mjG z@px!7+&1gA(YH26!@lcC^)}u82o{RniBUsQ<=PezU9plKWyD3)kyHnm&t7jt*W9b3 zhKIp*W>szaT1f=Ezc+Z~gA4F}!A|xXsNj;N_4+D zoqh0s+B~ZodVgDmim9zzV&Qn3UE+XCf?FZVq6&{&`HMJ}T=@q{HH9)6=&=IYaABzV z_V&SZ8$I0ONUCMt$Bl8mG_B)MYb(Rld+5aeY;|=f{05CQei%N_y;MNXUfF|%%BIE+ zs6B;Ago{A8NA|8BDWVba`8&4xJL4q}Q(@z2?*p@2i6>@gL#9l!TO18E*X#N-Efkfs z0$0CDSTWCL#8tBLcJq<5LGFEhxbT;Bf*pC*?P0X1I%V+eWYxLd^u^K0QkMy8kojLhcUMRm1Bf1%byXJ z+D3Er#M<}{U@99C)n895bs-1}Fn{{{i>^bW*u+*S%Yj=G)0Q^wpnNM^Vy%T_d;nX1 zyed21`{6M+{shQ9LfS3HNxqIgiyBHy5i_~pH@A-g19=C9 zPZbPk3I}~}%n(@eeN)ZpvSu>cI0?08q8aY1VLMoLWvsBnmOHNnH?)_WsH_SRh3Tk= z4@TVwS|J%SJEfcGrrc+7fnblOf{a$$C!lb!Wg~n_0!$ww3of3?FKH zC?jxq@vu#*>%?<*k+I3ib1oEWm8=-x-m!#7fU_@$5p+b{pk5xK`$IF{jeeH9@*piE zaB1_OIZAZvXMLYibl$o++F~_A1WhR-+;1mYTks@!L?g8=>UNsQwo3!Iv@}aIF3#TL zS0jmx2o#M+h4qwu<=EI<7^BEFA^>r9w+hz2u3S|i<|HC@x~W)ratz50HXRsomE0pi z8b)l1ON@C%=oY-IG2O!U8|2%Rde`4%VKaDvIzVeYX_*Y;Sj*NsC7bzg5rvKPIkgV$ zoKdw*1zF@{M;1+RMso-bey1sdl=%i%))|FCPhNFD`HYE|>LZdM{DEKWyAD<^*Z-mS z-5lJE?sa9`7-ejfP7m=o_fhn|(ITYv*5}BR*Vb2#w#^>zU53>ZYm$dkFFwJ7b8B=y z!Ei#p-aiJvz`yBbB~)7Lv8YmC z{x((SpA#L6eAA{LdcVauQCuXlpKC2p)7ncipAcM^_);2|=61~wQ2%eUEIe<2O4YzE zdV3y|WaDjbDSFb)_tK_&#W-B-!1)k^W8k%s)yd! zzN7WeoIGc%8y6)KqT*!1Yd*isCjffm-sW+A=C{>^FXDdZen*01)Z;+9E2$s|?f}}i zIoo>*z;=$VHg@D>=HG3DdO-J-(~aBF%j@#0gu&li?FcMU;auG`mv^?__ASN{q=ifF zS^Y>(YqT~u;7j`4&F`R=oUyEFZ(^tT<2So*X*r(YP9cPp99Gg$*^FZaSsr|Q`v`;~ zk|=nXWbP~q??^$FE&78rNw^;+UUnOvJu=Z5LoJaKrp6a8k!}o!Ry>>QbH0YR^D+Oa z&VWmbB9@1Y-==sz9j^`4ox3^?tkw>vdZwPP=Me5GvH&}NfmE^OIv$giwvOP9UG<57 zvutTJ`(EaKSu0)*y1bN~)2!NBqQEKs;VUfivT;7LaS+{YhGnhM;|1WG(?73_F06VV zO`JFdNUL2_=^V|Zx|rwmR?qL9ixwQKbs?=m_!#H#cXINxN`S?ms;3`PhLlD;?YU8Q ziK;cSM|MbLfN!Igs(IK2MC&hRSxby-7;H>Bxgkhe>EyjnaDITrFm^% z9N~JsZ!oMM)=Dr*oHtWk+-n-JX zNmi$4kNIeQ0`!0y=W=1 zCoWP!W)~t#9h03s@Q%M&zN(tc{dab!2*ShK)a|J#uvWl~Boct9TNFS=n>rmpICe43 zw|Uye+J0hr8-e&A(TF;GHT~LL{JGm+_MDdozCW7PtxT4JFRhzeHh234uL3y~aM)n< zk+&9o#;p8k4lGbQ`olfI^L3@BVDPkL( zIl#!!g@dU^AsY)RMuW~ig91)P++|SWM|$G#qD^xHZ62D02Zjntg_W26)FO=?LzF5HvsXUIxE zajbV^611f+OK=TorKr9uNy5g|*iDaeFq=+cObQnYRQyBip>Kb| zR22P#TsCxT96t++N;{;~Qe)4vxe!|LjfoBc-h%aR&IO!<2wQ^$VdAU9-oQg=UVdp5 zzo(>dLRCVxGW&vI>-Q|snDu`Ne~iTI6$s;yA#x4?>A`ZL*bz8HKuHI>X3^2f=4{>_sDy^Lj1Wgo?i%&OjmBH#~)}8PeXo{dwy_)h?eu6-m ze#)8u5HRlM3~RPQdTOEFtgo$>|Hbjmr~(lrMD@1FDb9|`NQp>0nbbqXkBg-_1z0n` zcB(+(*x+KA**){Uy%^oyFACxTO4QoSEk=*NZ!w24aTVox_yH)3$QtF{h@pbP=x?nO zL0!L1b~(n)SpFqYwYne1?i0LA0OGf5nH#;z$V?{&-4h!xw{_0os%LzIniKw=aiTy) zYd%GtsUt>c(#7P)*0Q<-!HNub%E)dDY~ziE=r1oR>K6Q4?+dZ@aGf2C|)Mw8ZJ|dxO zf*LaZTV3f$(-%q66f#SA$hz92OGOm^ADx794Q7S`9Kc)3mY%p2Bqy(-?u^n(gN=I= z-?K)hRmFOQaPFY#3yQ*IglG0;i( zv~ti1F_Ke-rk;E6dPdl`yeNU`O(tq`{!E_1wZQB9 z_7<2mjhj%3BL^YUjx*D8Q=%ARbaJixdC18V2`|p9#?VcQJgoc2i|02!tQ>w@*4i2s z#-MPQI*eZm_+ft%q}%NSIb=NT*FEQNF^Ztu;e?#}vgUcCa3L_AN+srlRCp6Mx~;aH z5to(igZ6u~m&Oj@gqHV8Z9ladmSRS3F`f0I@u#P!pLv!pkqAj&IwTDiMz7)fcf`xz z+DvD5`~6D&wWV~Aj19sCG1%@C2DYCiOLZf+eB68X$17KH(mU3*1QH2=q;!IO!}OWU zEUG*g)h3V5bi`T#O|3!!&r#D%lYF(e2A2NpzCCu+wsI8>@p)rBZCm4qLvr1^6u~b8 zW_BaH6v`o3kut+;CFqwhR4=dIE)NF?<1(Geo*yAn&RaIb6OeZ@=bneAmnB%@G)DB7 zFiMLpv}GnjSX1}%w(P?qnD5A>Lft45q^fHYlVOm-C{Pw$<+UWo-FO~6m{=OWg2mT& zu9Ne%RgVV`2{QBjo?mIsp2PG7+8s2C`loJ`nlc$`h>!+ z4qYSQ-ctb?fP~SObxEV&#`j92q{gQB+%-zu_4`A^^82sNMBFJ4mic%#_zjUL9ctd* zv!gs^9*2<=DTkjPYUx3~oc%%!X73nEEqi@Tx`CbdA1P2dZbRL7u1K00P-3%L+rvF% z-TE-!?K5SWm`^3q{X-NUat&`C-BENiX1T0LCKdmx_W1(26PpbAoCxwb{dQTLj=~1% z8mXm3&QnB6i9b|qSjEKpI3QJ+V2KpK5d?{D#S0?^XWoPmQ~Y@&qsf=QN**f4p_WWk zO{9=JYyLCMMy$i|HQ)1tp{KbC*UEjDXUJGvh(AckA+U66qg>Q!%x$FmC71dy?U7mLU{LTGOB=J^)*3Fn zvHUWh$&k9G$5xnptrM+XB;oOQQ`IDJJwX~ zr49JGX?3}n(jPJb;&3-xANzjTLiSDwkOe4g)ajffECU?NQFORp)+3A!U znP)sgWocQ4GsPO(0Mz{8WC++vwaehUlWKoJd~?vZl?$=4FD7}=4d-i>WvSZVKQ{!}RKP7JP;G5333@oyZB}kB zLPj9c?8!Gl1}XRmc*s`8Ro5RdUyd?FZn0(%xRw7k40qKm)TxeuF~%p0Y3m&rzwgP0 z>l-9wT!oeWoG6_FD=1FkIT_)dZo>HPRJ}Dd_lW+uO3jDB!goG>#810xnkw;>!;g%k zP5P*NsOnz)xB#J5kK>RHUC0#n-Y`5+jJKd1&MlV0m;#=TolaFRNI4^44Fyu}Y&b+S zY7U}{WdLqzg4WLOlai7)H#YMjdkdb$-Tp%2EmCeZSx|Xy!=>#A%DnDLs)&`5u&s~3cU(@ zf|a$RRu;4wr;SCHc*~Zu~=s=-Koq_KG8zr z8Y!#peC5+9XCUns-s#~VpctYQW@VemZ3p@m$pqwc^h>?kyzV=5l0c6qWHrZW5)2pA zKOzqm@$sJBu`BB~FdI65xZkk`N_*#P@k)qFypdCHT|Qu8Vk#twadS&2{2yI2Gg;oF_&a7-6z@MJ#fek-#L_91 zJCQ-jH>8~_2!1l4y|^%r_?itNuu+v4RUqZ|p##QtE;DWGfDo75o!m4jp^n((vB~AY z4wAR;&OVhfqRAPIZyG@^Hy{L+a7uF?i}em0>R^}EsedQ5Qe;FEo<{2Ojk$Ig{9os2j6E=wnO6wwoc;)^M;M<*CLz4e9Guzb!P5vamMae`k6+a}zL zIH(LAWNk*s#xA{cG@B~&Spgp(XUBb?5b=XZCyFHhI}=8i++QBkD`Ng<1C;0nRre?s>CSTjUP;o$cyfT_to zUs`X9+%g(7gGXx#?B_@MqnQzg$PcU4HG)K;pf4~e3S{=rxWUPp{u9uqD4|*|rArJL zo0@(x7h-J1+dr^4dc{3D=eL!*jPtN=y?9(wN=}v)b|iv$Std?_ML(c)$OTP4JH;2U zB9Y8)!6g%y9$f|%n@~c}Ne0Qpzrny-#!f4rw!irS_FUSVXSh^7x07_av8fbMp)@nj zM1W^Ea@WCHZ*s=RJKKCW2M-5Z7w8j&jH6M>E}_qbCXeVpc7}w!NUl6J;3oYU3ZD3l zOn!3p2s1B*)3iXifbP9cp3r}uuSw%S z>ftHYW@~OGlfC20b)!Q6YHvktOOiv-!^tRl`ktpsInqYm zbmE$thD8u-5JIJ%2-enk+|s4}xhqp|fRRT*1*o5~SV{R>Y!Ocre_!ep8zNBRB^tQ; zx|G$U9>!PR7mQ@C$`0;lJ|SBDq#+iLD)EX8M{7X-UV~P}CqoA)qVp@D^DA=Yd)|E- z4pEoS=65M_e#k0bW>3>Q&e)NOPcB1L%$anbpYb(LoM?Fk)IO+6JfHCo3|TintLZI5 zS$CWl>97^}!`9q?r9JD?U?N~xI$%zk4n6qf}XSD?OiuF_W%p?n@aTQB( z7QRnxlJPu@55QnU$njVVVR?Nz>SXGm4-A%#@if@_UEArLuYhrg)ExGVD0}S+v#^e) zXJgM+tkoZF&01r><{lDvqEOKZ-kDDxZhu>h>XqS>4lr6EJ9#@VGE8_HCNCj;3uCO9 zmjW%#?xm3-79LRM@e~zW(Oie~Ku`RbP5( zZ4a$D2S0CXmVqNGgI4UfUAV&GBUq+dH1?~hhXYg~xyE8-eewSOe?=H;-C-&Jy5MZT zreQ;62aDSZtqIAAGA0mrM+2=dqp!H5o(+gW zPJ;kASk1gGIa>ji9B$-c&BE8#y_|KesLZaBgoK?wXZ`anEVAPm#W!z2!RsQ;8fDvJogROHe&s^$GnX5-YQtG{XkWqGz#f8Db`kez5xSppyO z?9bQM_s2W$dvVZw?!78nu9C=|Gq`G*r$ zml$Yd8|qOZ5_a2QCZ_8jTL_Mm(r7RDrb(rSdMd+_s_+Ang`T+py zs-oZ<-OzstKMFVs+q4R>bQQ55wxk9xdfqrY5`H-WUOBT`hYK@2Wo~4tj&1o<{#Ms{ zq-8H3?kKsT?_1E7!&uAlbYP4JQ5xvZlnDs*qsrGEElbpepkn&GF>+GG0pewGze0jN zcQ0{qS)I_T+z>!=w4(QQ(%SoVJZ%V=X)7-mKs`uPPAWwTiE2>4@vaPZ+>PgYz+l1v z9!)-<&n^Ms|65<7xBU%|VGQD`_1C)l!+2XG7-%iR3Rkn(a*|8%(C~x@*xHZSf3p8b zP;2F|DRP7Di=(IgCN2r;M;XXnDQCH?vQ=q3`6An05&d;6oxgprc7G1l)E+jF6N?cL z2{s(1mJYLAmA{f<=A5>q7)bbo#Zg4z|PR7FF~>CQCD{9ILF ze1dnOsT`0n4l6K9Iu_87rV7p7RY7a9FT9<%7r7>Vmr0})YI9N4_Xxn+|BtG-3~MXe z)<$tD#frNXC~cAA9;8@tcPj;oyF+j(PI0&5?(W6i-GfUYXwaMPea?Bl`!D~Jthwfx z^R+R0hq8+n=ZZ>~=Kc3I=sM;gd(i0b9G_*9Wfy@B(|n8hh>cM4 zvJ>L~Z^tbbTw2!1r@nl=nlQfP;cZT+Pn*r$S%ypVXRo~M$uA~u6DaQ}nn%y<{TkBzKndA(1eDh838Qs<3_+QdN0O#JD$E76C?TPN8;~zE#l&2-9?vi^e zF=(tZgLvvoGj5s(`+IwN*mKlS5lP<}>(*mm0yA)zyTg$zFYlIHz#ykytHFmDj z{0%Sxq@7w=v1f!?>(Dq`p%5{C|2TvT9D>zmPpV}`8xa4yMrSy zyAKc(!)x?t^_Xc~44Y8HDSlLD{@|?K?L($XW~Ft zagW?>89yfg9w-+FcMGL3XmOMG&^hDGGkW>(4t+Q`?%x9!WC>oil@DD#2azWfo253-$23^Xh>=Hv@oy#RD z67dT29z0N|_xL0+nOZ?ZjbV={<$mCsp~1Js2529S>TdKFC*2>dT9;hb4qe@MEmUuY zB5f2_qpBuW5RGFhCRv$C4i(_fP9-1ZkUvz3@LV8@(?%HFCH&eYsb41s z8pZPBJk=++?o~XUIm&8StWPD^U4uon6uIA3$CO%LoQ?aCnzQYj*;%SojrvXrBo!|r zkdo+LUjl5EAX-hmuU=MmD>aGOfA74By$!55MPE)tfo#M`e%Se%NF8XfvJUDp9oj6^ zTqQx1_X;qkf#6D~p*Xi1!%6>W^)H&zaDo3o)g;(-9O@w#9^?JT*u6p^ONu8*SHnWS zY;>Ur&7^f6E-$$wefwv+tyyhbh_Pjar!|D+&m)hd)XaP}Y1HmOOTUB(tM|8Ljxkm2 zaYRl}Z?9EP;*VfM%FvLKZ*|RrfRJt`t3T}X{8_?=`d{)G7cc=*%GTu(WQS~mx$5GM zF>HDXw1zPQ9;5tkDYj-)Hcz+0LNlTFq(wFuR~&u!xb7Axktoe`rQ#=toRlO=HWth5 zzX}C}D(y3{ACTj^kbg}m^A%emRP#jlbe1Xa^jtjIi;523J9WHik#P<2EP~cz_+9EZF=lu+5lQ;t_LN@D47!FzIK5_>|_NCU14vvFdyQy zNl)YtW-lpLB2e(5`c&>^kdXix9C3HZz^&C^TtqTW%$`V1%q?#UJaELKUMAoxN)@mE!||=XZ@9W8EfrZ3YBC>;KzD_L$PKls<}dr#op&J(qc&RL4v|INEi+X zY^gb4dP!mul6P;}p426|%llekArd1Q_EgbO(%vp8+Ab7$VPwq=7%^Nt=r2dcRV66* zW+;WzE!GRagVZxqqZ#*l0JB+V=Qg?7rpTwHqC^%F^qXy%C*Eli?{> z;mV!5XX$p=ijIx3jj=cWsg%uzM6h}5a<~^3T-smw+4?WZahyF?&`pAf`D3`2t*=i^tli?T3h(QLEqA=P6Yeu{hErcC{8eKKZ71q24BcP6vsh0yas(lPqw@Bm zKjLAJ#?U|mvuP&#b`rhmJ0BM_wxgmqbpBTv&qzr9w7kvo`dXPAMje>&Mmw_2Jwsbx z{m+Uz#@I6RN@3okPZ|$i{6Z(HSLN!8-~L!j4cF1;YO#MSM;-Mu*xhyCVFNj)zVn4< zeya82O)U672>j=CiT7SGQB++OCDeX5<+QWmhg%68Ayb)fIoyg0_&5 zB408bH#jy5Yo%w%aMxp(MsuoH^i;?Sel_qgjNh|?i%3pKLo6<5PX=hP;fH$GXt>z0 zIqXv}m!I#51JRxOOB>F-?``x25!7ZB>k*%H7H!v>o;igUf*+C)XesI{NHmys1u4t6 z3ken=jvE!NAL))n+?BuVt9kR2tmi50ml>MZmVxV!tv3^z)nu)?+FiBivb`He8^>$y zYnSQ(SDl=q@)~hvo7Eq-NF0IQ3l#6Lp}6fd0joDSI|_^NVES}wrJ(g4wzi}mDd1eN z_v43JJ15<+ClJNs5}19o{QEyCA%a9N?FBSu$QWFrG)}>n9Fx_yet9}9ZRj&vH+;DN z=UCY%v{ZO^ZSRr4kA>3wvw$0)q195u%0MkEYj&|`ZGIa9#xq5r`1L52y8gVT6xB7@ zp^nAm$Symhg_{H?vF(7xOkP<+@)Ew`95`-RGDz>S^Ww?KqCxMHb5+Yg z*@^NAFt+a*CjEayok^zbwS&gn-aZ+?*`-* z$Z0N-6Q5a9AIqkd`OaE%en?*u{+%#qfQ=mK7kuM`z8(UXhIpjaB!%B|kE>%Ed-}4O z_H_fFO1J`h+#hlUn=&F^C`^nA7rK6?W9TJp-9`$7a|H&OKd}9M zWG15pnQRJ^VL=0iq;S!Nve14lF%Bii9hDZD&t%J3OFc7(xz;%Ym7e!1sWDs=dHsQRR3f^X<=b`rh?S(t3f&QLI9J`N4`ee^>*;_oJ0j^DC0(F-sM|9 z1zxhi{G(ruQ2gA1^cjpEp^JakaY7gVa3|tb=gGJ6n&tZ+wnW^y`aHCOUZl8mM48A5 z$8O-B+R4>U-BfpM*bYX?44(P^hmffjQJOUXiifUvD2b?R)K5$rfvUzZH-2_1u8-!v zv3sdn;g2Gr?Rwm{G0K5V0+Zz}s1B$%sxe5tV+q0tvAq~Ghd?)d>c&H|&i2+*yeWgU z0Pu8)8mjv3PLhCYFgcR#!?~1FzVhw;Jb} z@28kOI|O*{;;?7|)yB5slO6Gz1*y|+aK{Jg%r;+!z?u4kyZdz~=b*hbJx>1ErHbH# z9e-WNvh0ZzMt()Fj4PrOsbuuwR4LI@)*TT-8U7H=ebF1?U8%qLa28Jm7n&Tc~ z_8CX>3+-!^uAEONg;LVKALe5YxDoEb@HE*@{rNudpCRVk%O38%Jzt?;E>Ydl#kcR< z37AvLFmvvowm3td&Z;N(>^+}qjKVT)XT*IG#}?iOcn5gLSx=Z10X#T`2BjY5rtxZBkU9H`%JYshMlutH5biV<^?@O>a{Di#xsBsSg53wbVFlXYcCxH(yYaA|uEXLG67qMrHaNOMu*&ICE{*@~LifU*1 z4$Yl=Z9~3lu!#Ww2t5rGW!vJFo$v1b*;IQ*6taY+9Qtu)v&^f zM_Y0(=1mL`3YSPmR!j3FvWv35Yu&wd>iJc)>;c|SPh+$$4q4XsWqwr3DXraM6@Ccd zUu}69L{Qogi3Q)*Lyr?C=V|)Ku3C2<$#TCm#B;6&$RtE0cng_c8;P@sl3C2^5pUMi z>>I-lKWS(MCYBB&k79~YHRI<|%wTFzM$Pl6^}TFp97(i8=g%yL!TF+LwiO!gsp!uUvAo9z;Z{izpqeasX$-mUL}`yw93A(V1-MrH;Hw5*+u zQ@Zx#4Tzm?NsOf>;rr@YCce+m!^1zvX7lo;7ygvAuahwHwGYACo^K~b&?`)(m&;vL zMPFt{D0+eR?RiUCGqWzrjxQ7dTAnz2eX5v3aZdjxbi=}L{&NL~r~pY!R?0(;|3-HS2iEj-!g}DVfv@7>n;ZUphzNSC4GOgk3y@>e2^%W6_-P8NSy*VFn*a)o#J>o-K^CI<5R3^M8K%DC3xoJijv&aJ#Hw7jr9O=Dw4b>o|WaX6wct6|=m z2oPM}(H{$^rm<8FcW}E6J?vEaKVh5fQ%Eve!TjvNy%p5oV#vsE#;@R}7;XN*w!1K4 zwPyq2y`h6F`epy9FiVJK!2!y?{%i$NHCJ}v8f4iUWPY@kmqfE7by{PABiUKJR$v+n zo)O~ptduUR7;e^0^}T^v8&RF>uvz4WVq$QhiVp`iwL^A#za@lCwQGlHy4X@9`4Zx? zc_z(M>#z*0KggM>i;zI;cHUGP=ZtgV4=X;F%OGhDtiW#ykdZ@pB!SA_2d^h86*(6j z<}qL;4{y-ud$$9**5+ZY_*w`bn#4QF7g?ndZ7A_f9*Vf*u;pGhtxU|P1_*S|yLLy!4WLn^yEZ8r8P+#Iw2^Kk`YxGo;vXEgD@n{2Zmn-Y1Zj>U zZv|i=xFHqybj<)3Fl?a+da5FIUWqF$&p&XK zKPM9H+;QTOn)39HMT(_C)R zZbIQ&DJ3Iu>nYEhYAq2I4nPy;8x)S*ig!Bg`=5`p6E)aESDn8iS7!1^DpoP}(ULm- z-}zZeeFrtcdkHNT7x@&ncvSQiMS7b>bro7oi#&eDSa@0cGLAv_YWRSDAN7i% z1r5e#z=8PxqWaCo`ab!sFcySPnIwXP{K`KH&+XqxwqP; z1<76$UGtZ3ofRb#VI-i6QbOAa?y66Dhul7*gSvto7+@NQFGk-TdC1r`Bb}^(=)Y{q-muGbbszJnHX)L&&hXPb@49c(@Vh-hBL4sbr`O*NY3AR{ERLwe?rT9MAV zD|p90wHD6SGlmy?Gp}cYxw%#MZiY`Mikj^oe7;n9$xKHI|LS5B*Y-m9lErmo>gIBXhw$0? zy9J={vJN_USn|gjF&p|ly*XXtxxMz5rx_Gh*K%+967#Y2uZA$y`;7M#HLPfD7{fIF zUCXR#oHT41%M?u9xQv09!r%Z-aNw_ zL_Zm272GxV-$zTvbF}(aSfBDli4h`ptc;A{#(S2aJrn}QvR#S=eCzaNmtD8f!&E2Z?}t_MPLwU{JCHQrvs zmlh4?$Qu(+9SxUsjC}FYD<0=}UY`1zz5)8AaQj{;Wam<>*FSuRD@j3WI;o;{rBu`h zNGYzL1yNLkFk(XTE(b$}zHVF2M_wD{MQ9db)ypI=N^vfhblxf)@#=kM70gjMuBLwJ z^e$WFIy=x*$#Lq`1YE*F(=rec`*T3F#VIe#Xl7%J< z{dXT9C=1Hkm)&*Pxw8MZ%^$VJ2ZoC4CZVt4`Goe3pn%P0ls6QX+>M-?&i<|z8Syk{ z&_3^FM^LuL(;;z>i^yo32NDU-wabnVp7)94|H1g;gXw9sGbuAdMCyws=iO8fWUcNv zIrxouBH%axeBY9P_j_B46PLmRW2wHdV9Pa=KgT^byItc6@9tJkanF^IOYs2F``PDq zPomAo#-xt|P3Dols{JrQWFP4Tv#+`bH=6|=)mYcq;GO)~ZZiLW|HPhu8`j|`;EY9m z=g^t0jg;y*Gl-1GW}<7`*}V+;d`MBVjNaeNUg~AOq>;Xb0=n2`m56lSLjm2Bu(28j zu7NdlC<-`k`!x#;gR{J(I;Hvzm`W_N%`~q)OcG5MkM7nKkX`C{b`Y3a;$P$ERA(GH zMd>KzX_Oq6B7ARz%9=C8&<$R-%Y%~@ zh`13wtr*>Qg=Gz6iM{_aV6edZ&*0USXyL-Gc_7B>OxH2x^y%QXqLd*%QweICoz8in zmH0@sT3=B)x{$r0m%J)-z)`{P#@0cXdQI%U`3>=c-?{7_=pd>f`5-#h2>zovD0KT* z74H07$C-~)*N!|R(=j8T;zgBy@@>9tfjXA_s`V@)1%cro|1!Ftcr7TjfSVsO5)QzL z-C0Cs3Jm?$QhUjq$M8>b{^y7KG2=BF z7qg|`4ZmS`A}wz8m_9Jhfpa9{mqbgoL6C(WpDVh)%mB2 zBfT|O-RzqA{^J0zG`{3MTAYv1u(05d`jO!MjI%5uaO7^bYP~D#Wp}oq{F@b5GVx~L z;G*ub*lXWdHqg05PTh^MwSG!aJ0TPmS}M-;gcN9!22ZHrm-Hg#EO|00 ziLRYaA})yAgn~YZ`OnvG-FDh8>+;AKN%{S%?KfzDx(lr6OZk}kUn|67e0@+-$90}$ zXaL94YbeaGZwbDGVyve&_J-SMbBaoYMmbMp;gTmNLjUiFw)YP;Io~Ysu$;fVUP!Du z$S1gJo|d&ItLQ_LhcAgC*??iY_B+5EJ7Ckr0bU4Xz%_}i9&3*U>IO9LMcLdkseL0@B{dWqrD#WOnFhg~3}7Nu2`h>#w142orU9@U zT%ZHm!KWghGe4za{=xDp2qa(rg+uvoH{sDhO8<{BWpe)yW7-BBi)aXhJPNrh2??!n zEEwcv|A?!4Y<)x7@1*$LoZAL5i+N)^6Y+jYjnGX~C}t{PTp!~=)hM?Q;1Kz)%jiM} ze^Y(STvw7;k?iX0lB`jy9}84FN0M$yZ{a>wmra8P(lIpw1WPlW&`5Eq8eyE9Bkv4y zTw(X9etmWUv>|`o0Pc$f_eiB~9sr1pfe&SLfM?Zpd_(aUGrrd!=#sz$Wr2p-_MgPX zeP!>KBUNbvl5S@?DO<*)WWbE?=l*Ms01?n`uE-_wJSNV9PTxS)gL%r6C^k%oKCnKG zSSRt`4hpv=I~iNcRkKoM-q3nc%6@fMlT~}^)~Ct6jDk(L4*bO9v&)tywD&{aOV`9n z6)$$BaF~lqN{?u@`BwPrODtn=7ZTMsMSGF?eQ{9C14;kWEd95kMWQDp>P?EMW*mrb zf=5+HM+r$sT5E%_yTBEGlb)~7ECCvnMK3x_mO!o*mecT0dA%IR)!LkFKWNGiT+g)? z(lw9E<|Yh-^gfbMq3EzndmaCJ4|u6PIKVmnp9PzV17~Ye6n}(PzbTk5V}=(~SC4K@ z3AE!FKuxW4Ec>|neZs?Ck~Q6<%4s4U4%*TX9O|{oZfX4NGd{k1f9+efuVypO>s1A; z-@nHZW}i}S z=DiW@Qy(asM^{eLYpy&s!IV&e?uI92%@4KF`sdsZl@uY(WY&+EMV;cxp$t!3u8Yib zIYfz8qmzD*05N-tw%0H2zN#GvH@QUTg}yN^r+q&KE)qz>=B2ymvLwGmc}4BvKo?Qy zpB=y8VJyGorH)LVTV0CQk>wAm$37H!oEzzI;x79-A*oX$g8?Ipjt4Vd`zuNr-NPl+ zg3C&y5lg701~SG(L@C36hnK0niwB#IZft6H$*-Y4@ETNA*xpts%Ou@RPg}bG$SB&c z26&Jo7n^k3YGr+yL{0AFdHshT?o3aDf??4k`!_LVUW3ffMco-WxpWpcv! z&jZ3xR)km{xBl_=!FnefZ!NncA-##lK$R!QVP8qq@Y@@#-F)90jzF7To5$|_?Ca~p z2VF)KqVZHvBFAJ&8TiKIgR1=LN>m~l9m_lZq5otMcnC3%7Vh2*jOLuil! zpT_LMO>tRS0|T~H|MT^ViQH%1MS60r#r&p}$X(34tJZz)zLaKs7wUX9o;&Yqlm+P4 zC?)6X($fQ5%9lUuC&v}7x3Z^^uV_7q24{+GO5%fA7a^nX>>IiA@nf>?A~FptBS4g4ED!8=dBAYg=pU>WFRDz~m&Ee(!EbbCzRUWkpBj)7{|`t@BTK zk)e;>uWs!8+jMLBKhu79gxEUdCI$yWO++{7QDg3U!ruR4{vVqbZB=)T;$+`nH{dT9 zprtp$Yins)ZmCj;P}P5k3U4XL7`8-eLC{n#e=t0 zU-%gvPOC6qz+QZs10K=OgA#iDw>fYZ7mO^p7Y10+yI6TD0V9^PABihsS1J{X+|Q}L zw(E!;5npOc>cy>>p6(RZb$nWHz%Pm1QRdEf&dcOOl7J<6;q!Cf&_GP1Hlz_aZ+ zRU_{rL4!B!>DT;ku>3JfERfe%7FYo}Dz%!a#1O=g#H?*H#W2>L+2Pnpm33=4hDunv5>3JPWtSLR{79Ohn zHdl$7wmxhV#MUFAwvKXXqZP^j{D%9TwFNrt0nH|wdDV??%K9G>GThssQWx6b4bbiB zD$e_EaaWx%ASDbasWjQA5qbF#@uYk^;D8I+p6~5SGye-q624}`L1F3vq>XCd2xNyI z%X&c>x|>;og^?;(HKbeJfB!b+>Ac3pKgVvp#@5a5q2<(G^j?^J+0oxIG-97VG`Ip; zU$*Qd%jmPyr)2J|S-cA5KT%M+`#%&LceR(qB9Gfu`t1)u9{2FRz0KdZvI*BopTI4* z@DiC^s3yOT#YK~CCcbCsYH91=p_s1x8ZkYNH^jMAfQ$8YG#oV@+ub+F`_W)*yqm+S z`>skZ;lJ)onA#fkr0syb$mVy+h423l-v61#3j(*mJYpQLu0y`GvB$sIi*?BfxRD3b3VM)@}A zD96tNQ!9iw5Zn_>$&}Mz&V~dZHH=G08-f#Kg|cW>SMjY+LX*7&M0J z5_JsuAG}#V8}!DcA0=}Ar3uw);xKQBSix5Ygbakq345j4JxFOB+nJGnla-f|@c`UR zRp>Ni%gUKkbprW?mEtN~u2l*Ew!2S?q_ESSV4)mw|dv0X( z+H=o^(Y!y3UmFeo@frUF{`T5@_qV2J^yT@T#kdT+fmRm?Ak7+EI4~04Kn&>KFHHfz zv#BaKp~Ub}X|iGyd)_`+qN4y61(qtv@q2n@mh6209Y7jkM8vZFsqlNm$hO{`+Sl5) z&z~D_=$^u^V|jZ4v}NXM#uYTBN`{q&0b`d>kYYW7TsA1(Z0lXY}$rR{o!aX&9&2xypjnM66)@7+me>!p*d44xXl)#v)sB)8dtw!1O zlU6AHXZHWBJreXCXt4MxK&n~FK^V15|#<6lk;RfBXeb4L3ht|eOw7y#PbxmzWa$%c&9NhA>Xwu>nH!erW1qrlO3T7 z2__TUGC~RJMH?0f?m$UsM|?x=7}e!OH(wz}`;p#J$2Gi!sh6?Jy5iTtmu_*COXyRL zxQ~i&DzHYP4u?##rES0oD59)+8npc1#fG^#D51PfrxiPoJRC7bGZ|p5B@zft8P*v& z^rbSxkYcPHGNRv~>I!I8GhUWzJWc9zch>!)r85J3F~6<1Jpxb&fh z@_7VuQ>Fht_=U}pHF0(>YA3Y*D(T^QtdN@3kmv(9t zJD+tvr04kkScv}EDdX8NO3%Nzg)lBHEHUQyv>JKY`XwbC^4AU(27^>53FbhVFT%-B z1KdizStW`-22=gZZ3C@N;G!KtcN`#Ba>^Vpm7(3<^52Q`0FE{7=WNZxqE9dJ4)#Tz zU4Ra`pF*=AhJC&T_OR|#c`ta}YG)nKKKgo->TbM*rUIT1Rc=IJkm~Qt^_mAtwgZcV z_-zfw>CC{(wH1F-IlQ>39B-|WT(@$yNAqf?fcYb#r0L+ZDZe!TE<_Jde7_YT@yA>^?%OfniLxD zDBLCz=jFhoX)A83z9!Brt$c3z&JXTK*Ci_A=`K9J#Eq3G;`uJvFZFXaAy$D-Z8qkE z&nvkvUfi}wP}bRz>`FhTA35|R%z{PaZNO)pqU8?m*r<1V-qU>7*FE$pwBW$838hH; zlA+6UU-t)rEfo!YH`N}h?sORFdh4tV^^#)YEL$0M>TF;Cu1EgSpTjRfyy*=DaLl z9bd=+o&l&>>dG$?mWNDgUg76z^3eJ6%{5Jv=hVve10~D`EOa5sIjGW#F`ieeTI{>j zaS{xBvtC_j4Sj3cV=XoLetdX2{PrbL`>BsfGf&d{+09s9gP-iKb+Iumfa&Xv6Q-lcxX2lD+rn;zLX8HDoS?*9P?d*FJQmI@Fo(YdCtw>a~rJ!lQaL^DIA=IPZu zo&){}f)J@S_e6qTXXR)?q1MZ>*QVKN8A;3sLusS6iye(-B41@*;jCM<+a!TW)}sQp zjCcEUq2v1? zEjKkj9$e)#no|QTcxX%Y20co)3SfU1c=={hIRER7P-)sjpf*ACKDN^_wn52D!#oF- z&I5nZPMbC}UwXBIxlF%X6&qN6%g0vHz;4pmdDP8n;1O@>uHeCk$Nv{V!t@BxUQ$$B zD3wWTG&r@FmHK?KKeoouL~bOURZwLtwDd5&+^1b!QudHH&6gHzIFQ5Cga-JYc5vQ! z<3g&mSAs2Tez5kX0<^kK_-9 zC^V$5wU-QRhb+J4{QCIDY+$*^0l;%mdxNb;OvGJ)m-%<-E*@Z3 z(BkWwd-L3(>xBNNZgC!=bB3X0d(B8Z+-w|3%LV6zV4}p!%a|7hg*-F!xJa7%E<7Q$ zt1@Ms2~s1Mvlo*6w|S^%o>dfB&Q%`+HwgV?&|3kUwbRBV(#gYQBjqIgn;KyAIo6&z zdpU)gc))MQJmKH5^O{7viLIKPc+$}>rf80}DM2Ov@U=__3aglgm9A*>Q>VF3h=OVUC*@Bh0;he2K@>l8n8|_GA92g|NNLN0S7mR5GN~ zFGf@$HQ0`a?sdv`4bCnKs@fdIYZ}g|@6b4fD|s>ztlKyuELPMJjr9r}#f5{*zDXBsYP4781Nh@w2#XS z4UOZv_}mEaT1^UlZE_I=o{C}{h!EVq_=U#%#bSHjq&^U6#+kmNEmZAyu)f&dtvL@F zI0R?XzSr?@gmWKisWP47T6z0{-$~)pl?9|KEH1K^9igYT*!I_mORH@EA!7| zxKRs`Ae_6Z0A9UQ&TKhVP>3CF(eKr#ZFTFpT1PxOl4Hp)R`YwfMthLkW1Tiv93J6d1W@e+ zTy0d_I_4DosYb3$2KZm09J>zIK}}^9;C+@k8( zez|U(k3*OihI_|0&5CL;c@5m&{pw*Ha0@18{CwbG1!L;utjj%CXa<_TU6^)4fZ7BZrG z6rYd9QD?KRV@R4Y!x{D~B`0mU!mh@=yW1O#(FENhtu(t~Nlr>t>ACT1{8akv2m@^7 zVqqid8JtV^5ev45uWTx`NZJ$G2Ej0EXwj>YM0IsUE1C0%CVYl(Y zA8(;gX;{pf!r&B9NkDZeMr``Cf*xq_Rlqnj_<%}7}$D*fLcaB}OlbZ81=`+MP z3SpV|ZCS*mz16jSwywzSbw|VTShnN*hJa&?1z)|^-|`XFpZbQQ98Si?X;W5bOya6Y z=Ps4^=yj}{R=n9G=hvTX+nqo{x40=MOctl}*b19<7&`<%SS2!BAGFxSM{+d+1DhOa zme`BRnR#e<`6lIJCc?x>x6;B6uZ6-NO!p}=Gxz07LFX%lWZg=CaH?RzSY6w_HVo3tyfR$CEiu#!g zZFtU>m3C=?dr_jwg6++Q#8CaR)2as&!kU1K4lQWm9;}U=$*i|RK~XKz(B!(zR31Jw zd^i6|4+W}VJSt)gi-pGd4W8UsyFbq)TE85*(^NT`^c`VN{pPsZK7;RZY%pwOaO-}7 zKxRVRJ<>Opv{o->9G!@W^AFbH6z|@4G=yBhx@kn8jjxGBySmh!b);8->4{LsaOA+7>8Ym zL6qVO9CAkn#b!5nfi^SpzC~d*jsHyB6`Z_w8bH}g-~D;!Q7SEP;JQlaNAEdkw5BF0 z9C&fWQkJ-ZbR*y5lXQR9-QYc-3~<90>=+{E`AgC0n=^iDzp|!~zG;(>cWuRjSg*~N zZ`jn5ovzq(*X*NKXJqC*yuX!9cTK6G?FVs+x0lash4B?w>}l=8EsHfl1RN zlZg_-DPp)Fuugkgyagjh`0HDr-6~%U5*@4LrjT8|71bJFrw`0lcG-~ft-ppS8t8TC zutC4_o(lsDVx{W+2jf>Y9B*&Run*Lz83n~0hoHrUFKro`fTp4V^F8wj^2h1!A9iGj zj~NpfZlB&q`|w67?GX;H#Kb%yLWZ)l#SI*QNW4h{GfXhq^Tb*n(_BlD!j7BoJ!}LP zq)y9eL1-}OlH+FFdCe84m-#fKuO4<@4=Ad(o0>Im-**r=gy+P5t_9dyofq|ReWaa&>6~>Y>ta^&$b2{A7~prUFcq|A7w3Xu0Mm}$3u6;!?{VDV zztk=)rb7jhuL*LwP%ph|Cke{Qo`2?3cjp}UCA4y@4`m~;O`wtkrf+u8ZSH2>0FQIa z`ESSwKrt!=e{!y{7htLWzho&Ut=(ifH2hYF<|8t|!T;jo|3$@JgrLwQ-RTl1Mla{W zVgG&BnTyfdh^wzhI)Mmn#8xKh@^23jo!C`b%GEBdEMj> zZ1WL44nRqJ$0K*g7Y7&(4(=bFc~(BfG%aRWR@v#Ujc14cCz(fxf=O+6PTi8t57J(C!ieBG|Hh%xH1AOgE5)Tnq0fqkD zLq-sd*7r_%onRngU04PonZBA#yh>f=igVONPxTHQiHIDfAoUciTN0!pA>Jw?3yAP4 z=#K4C(ZXI`P2S9=i?n_*-OF_Cls>Z@q;{fVOy?uhp`UiR1*AZ(-P3F^{%zS;%oyw$ z9xRuINEb>YsV#~A|3>QX5KUW^)tjr_oDZ_iI1cBwr#rF$Oi?kAW?Ya7Xj9U{X0RaH z8j*f&`zo8rxhC|)qf`+LNLlW7Z~sr@5kreFwc!5)^f(LLN)BPeKye?&j<-DTv?v9K zn@?5Gv9t)fspT8fm3U4s%@pndnW+lsPh&8V6Kh8n2J>$i;kNZqsaqCkmxdIjAB!ZQ~8&y z#Y@ZwQ?BBkusM7mrVEbEOA)+}@=t_v&-w+%K1y2B$1jFv6}Kf0++OXTV0W~~-2b;7 z%0&TSK592GS0`mtQ$794qZV@)i^Si>l;nTPMjzhJfi;&C%y_J*%lf^2-6VA4p+_ySR))sbE zqg_FhT~~RQOpLlHYKAn&f;xrtMPn~-1x>#85UMRiNoqUvyw6dd?-@ha0zF<9l((K2 z1^{x}g;g&ro{qvfW@WbIC4g=w3mw{?c3M#_tr4a8ny`Y=?5R7dhc6`0&| z@^u0+vGmAnzvLr>B+`Wbi*bxMBN7x`nP|v-FB{Cdp};!eP)$@{D|f9!E@X4?)lv`Q8*DzRYg$|W1Kk%-b%XK)_P=M1!YaqrIB zQ$K&IZsbeK8RGJ6FZ~lDv@Tr*7Ss#YM=p?fKqt*_EoC#&)1ZPns9J}HK3_^9vc zTRAM~$(dHrKU&HPmop1ZDH(7~3OOI_=3nrQL@Q=E26%H{ctO)m%9(Gath$wpjux(IXQ9C$EoxkBisRJikqbK(rqmTZ5AX z;A4Pe{U^E0ZzY8%0Hfct2K1L=C4eI}BhiH?Mc5-D{UmXQq^ubx)-YOQRIyCFz;rqO z(3<`3jW|n=gLe#(HXj8>t00n@X7SXpB7Jo@-~v&4b5dk1ypRy@juK){P_Xo4GenjVa6tap4nR3Aiu10m!I%2au|e-p3V$@% z!_(%3LoEf4u(Q%>Q-hEDiM2v&1S7H}=~waRu8gNc6K;?1iw1NP?*MJw!U zyoHkHi<1FKB@hT{zL^>-5&qIcT?=M)`*a?~V$<0t*0mxP6Rz8yH&ZqWTz3I!HfO;< znY)9Ii72TKDVnac5w@%kof#V;RHT`8WhW@q=l9Z1Q30Jl4l&2R2<#?q8F=@0Ih4Nx zXm%B!k(TC`rYX0Spq=Cs9_4e|hM!gIXHiiF6F5eN+z)gB&8p=AOI#ZadI8Hv_aA`K zNYJ(snXCF8_V@)tZ~1(-Pe%Ms1R3H@+J-P!dITJ`ycvhV#jg(%r!oDaH%kstax%d< zY})JgdcB4r8U;wb$w;iJp9P4cA|)P|Z`f_6QU?o}CWi$bkx+-JNF!(fiAC?nL&ys= zhCQ0`!xxu-oF`Uxh0%TzCkqi|p!$-c3GEpo$8&oZDS1kV@%J~vpcyvXrNf&$3zpJj zh$02w@1(SE=y8)i-E6lHvDG6O58*x|yQ3Qp{0*^9fZwzpC2kPgxy z5eg&3@y~D2$Pw#DjWVd1Em`v{SJ&Eu0}&A|j{-cGX-yiVvDu=1^bG385~_}=b{aw) zT+r25_wIU%5DzO+%&OqI%-$}Q3QvTzR2;*x>r%*k{$Wq6=awu=^w!E~B?DO#JH~RF z^!6{)6w^&{x%f+h8dZTq#Oj29uJSXl^ILrSt_8mkX}>3m=$M%U>DaE-Dv6asvDnV< zQd$zjEBWo9OUEH8cs*~>Al#P3P|?IF?W-bzJO%SOv(mAr^NySY8u6U|atGo_>n|e| z%kbDPz?FfN6rSf#r#ef)Sn{Zggn(~C+EvHmy1O$-LqtI%vv?Hrp(*sxx+|Lg2?nRC zZakCXNRO3Zc7H-@BcACYIH&f`{LCX0{rHJX-Dl9}zm?hz= z?$JIkgU9Re5YszcBh%V{uA93b63bo1zk_ZPzk>wIOZ%46>?CcsQG_9~k{z_?V)b`? zCR+VNM2P~CZy^+HA1e%OtOcevJZl>3r%O?ctOBELdsg^#(tpYij2K?%JR3x8n&#s1 zS7x$_Do^itJ7ZpVgr#m$2Oa3hUoJxUeDDY5TPRMMMO4({z4MU3hoNF1u(Nl9uvEa4 z(9)Zjv9-GWsg*?ho;yddi;;Yx5$h%MMgY(L_~ehcnCCGy%NTu94+V9S!=OjB;sh9F z94xlQBC*aE6!XhfD`cop1ClPR%^FrBzZUnbJfM9^ zX!#zj`;k0OsueNL9%*f)MK+hKUzcLU!tT6#l(%htLg_o&O?ph~4?9!Bl;XmiJ#7of z4k$QL3OAv95=A<)?9O<{8#9P!ev(|0*~HxEFh`BrV8SON@5P(uSkJZ1B9>eoFN>_E z-TM?4;ivDDDx^Gnt~ij0@XxKC8}CZnRlw_*ka$X}y~!^V_d`i|pk2F*Dql}f*+lLy z`bXN^GhfCIntBSZg=fYUsQ!QG5!6wC_)sd;2t3y$x)}J4wOW!;R?DBWs48%*%d<_@Zw*R8SPChU0-0(l)OxP283ta! z?k}G^?*3r8P!;SQ@#~=gF3jQ_Yxd`pH(R6~OJmJ_WN$@Z-;7eUfwYs}Z&k6;y7%$7~D`~rxW?x~sY zv4Ca&!aj$7Wnui?_AX}#o${6nFY9m4$p;eFvYqOjj*#aVKj0(eoTPf6nRLN}o7y(t zs`qccc*(Y=tB)=k&OscEWBB%fMS`ULhXa~IU<+71iJZ;Lk@dsHzgOg%-pPm38>fiR zY3!^g`FxOu!jr=CDUfU=Q+wHw z!dVqm0DFZOJLfin6r|CcYRx_2xyk}W7jMIxgHt-)ZxY7xCwGoG5uvuQr)E2zZYMK2 z$rf5r8zVA_F~p%NYaJYE{qn98nrzh~zt<_G<77ZuEbZZgP9Fj^!dpe@UrEiZHZaO` zO*(V1=s|2ilCp-h%(l^A?>Bf~HCL zO5xO>E%V~sjh3RMpVo zN2PpaBK>BnQ})q+TWQ*4&@5lyI4P%FDG7Wa`+s6J?^?Nr|L1LW0-rjOoQC?L%GKwL z=1*oC=bF4>A0rFTgI})Ue&~=mxjnO6Gb_l=c-$UB(pn8EmEV)9{eQ3jpKkqs zV)_3aNY03d-~5V>PkWmf=r{L{#N|f_J<1L6SL;%I&3*Lf$koC0x>L*23C27jI%?(v z({~`ESC01!x8~1y{UVdcL z4Yv%*F=&+^IH;kjxPNe9%0t0-jdJr81SpY;H=~3v4`5}`5)9Ln0g}D7&3rJWe?Pxz zH#c#7L~(NMdiNr9#U$>1NG`L!l)FB55Jj?@!D6F>K`a1jdHr#3O3p zQS=7%U)Og#c1CuLzJNZnW@j+@<)3V2A>j5Z^i}7-pvzd6|L6wIZ`g>TD02C@U@|Qv zoeY8(;Qk!$k!R=OQc`zjbfp*FdjY+={`7xC<@_Jd+Qs)9stpg8zmAXp7y(ZvB2OmR zBbNX^K$~!@gy_o#Kz}C?i!4D$o!JHgLi`0hhVjE%P-jcgB z9`vi4O7EGNr*sTFsY>X;Z|~bpytEX4D$ITFo1;e3`8&e32~~g_woVKS2!ez4wyj5%QgVM>VAmjH~^5TZa3XP&s@MmDGjI74V}QjhXMI=HBCcF z>UH9v8WE4rE=S&zTlTIU+eXZ4#78w~RguL=?pe@$L)Td>JZR~G4S?V+L5|ZSTl7H% z^tv~@)1hE^0PYwSGI=^65^zN?bq4co_gxyfTN8&$Dqkqm_$SwJOrPn-D35L=F>h9) z7zDWl-p5OKV{!7=V~w-QbP1U}h}3Vb3JL6p36R1S_sz1NM(0I+ zd3XNCEFN4OyR@8|{LSaze8ZC1Cwv~B{a9#WT*7C25i2GlQ{K*e7{2u>=dbGx!$Je8}HbB7G9`dT9h4m1SK-jC1wD&071De$ZlaB{xPDnj0PTmUtkWkktDu8lW& zgF0ZbNGM_lECG0$PnCdjlVAN(0Y>yQ5mh+<3a%-aYl%6hpjhMOnc`(H`-Jn%&%u=z zFK_A6hF}S7jcMFoWCybCw0P1gON!Pj@{inES}A%b!k^Kyd@fZ&5*g5j^-bKwYH4E6 zNptUbq_1m+)ry$t&#{hc z&Vr#@Z(c+Wx+VR|kx%dRR-EXollAG?CSEbb1YmY8j=EM``NA=BddK*n!Cc>!gRs zqw}roY5Q&3Ur-6%t+~z7qpOY?=b#KjP#FC1z_lIT_i+9No;KuOx{ExU1&ZS%|6nQ> zvrUaJ218>vF+rEBRY17G77#IxhmK)A|UK^bC*;x~T*{?E(;% z?(QkH6}Vn!$=1(Qyhjf{X{=oq0O>`f*-NM#=KTUvIR2S#;d)O-gvh{@>RRS_DB*yqP*PMI<8>LRM* zF0M#$R4vITf&48EX*q=Cqx<(*li90eFx>(L2sJ3M{?cN1dR{<-&`Hc1PNVod8TtP= zK9Ml|r)f4h=?j_*5}Y8kpdFRN(lUaet50ZfRMVv}*j{*+Ejw*hE2i>{DG1xRrP)B> zVzO`XHiUIeaPl{XVdQo^+dm}{Hn_fzv5p!Dn!#5){v(6e=+a<$Dtc$c+GkaeL8@1R zQ(%8>!zea@b-v1lxRUhy0@nwg;+(6Zm)q_Y8ug(fpW-?9sZ>2z z%oCP#m3P;9J}9IfU>r;W16H6UK!yA15{142vsEaip8hhHX)~*W#YWU_>y*YXRxXc# z4t>Lax6C6hMcp0gXhCL8r8aYjujo=vVf=I$PL(^0l3rSalicO_70?d zO5^ufeAI&UemEmUa|V%`JZ;afGN@Po-7;?3ewYDcGpnDNrvXAUw#399)yQC>`W- z7*XKVL_eR)<^`NEbTGOD+RZ!?~4eV zOPA9FvX&~oSp{xq$Z{IF83*|Aw$zgH&kUX4jE?H_%#`?!#pvv+6e!sXt%M6amiW88 z#))lW`29~wur%k_JN=V{9VhZu*Cee-ul02@uqxMk@OmWA+Ho9iR@M5a^tVlEk;KL& zEyrKtTr8%C4<1CQprNK#phoUbX?{}dCX*Uh)GTHz&EIP@lT~)T=|08+^D-;{88z)+ zw8s0tdf{1+WAmBi%R}+`CSy@0jSSLjXEg`nUFo61^@$urJ3phxb1j?NY0v_uhcYyq zC~5JN&I2VzfK9>r<74=w4}`)OAoj)!U=p}4<>ClGq4tybWj9C^x6n8ij5vFLZb93o-kWw(T!hW(yt+xkl{o8-UZ=`vhdOF-8&v7oOBl_#kNC=>d( zRc5SYMVhSQBcgQsUrQs}@pTvRlYF5}WlZ@S68L|RsEG>_(S(Ef6k@%I@!ARSyTgoq z8ZN0`m)0{b{_NXCm$M6lv?ztQWAo~X)v6Ca%0T^rKaM_bGG;*W9o${%^y}G0vLCmX@QqDQ^$|HJ&AQ z-k`FD$eOR$PAVfKANGN*(}Vk%;i8X%<&R^PoOf(IEQ%7fwD&L(M?ybmgwBq4BPuM2 zFVMb@HC5Lj2*nYb2d{jTS|sCM;#4E2x|~Nn#CgTperRw7s9QBnNA-&PPl58d%WolW z*Ejh`>kvtT;b<=g$~}@dUvS=hOJ^uw8wGv(5ztuyEi?7Dpa(}q9^>w8sUr5TpH@~V z)^iMUmRv&1?Z=hE31^Lie!5{H1;LVxS89-ouwgNeU+t$K{@z}hnz`~0gcin3!)kmT zbxaD(PEuF4G~?m(hR%We#KwK)^)Y{PxL>sd>^5wh>(H*!-7EQ4 zQ3nWKy!y3*EpMPPyH6PKK8WzStcPf$GXKj@acDJ~r-9FxmIWy9A^JN0_nem)g1klJ@bh)2i$}!Lz>$D|pNGOI4vVQV_rLUfc@W4( z=b!gM0SaHjQYZm45Z6)w){!x9aE9~KyW^IV!%WL>18Tn1!^ey<4`)~&ShP;U3op(B zFPMs}zmN~1WeG4A0?6QH8@BA>PU_&|vU z4sx}`9M0;vE`!dFdOd%M^C@1A6Aoli8x>=MO-DOAYlN+X6JdJWz}Q+-B3`M zHDm#4r_b_?Fef7?PZ~kq?Ad;$Iz{&XR1yNL-v4aC^eQ|W;Emr5%2NVq53L0K9yAO}zb@!#~IO=dg@bM9rN$A!BxUB^7OkssYD zdJF!B`Xq{5Cr>&Ei9G`m*0Bg$CTbK9fTESJ0(A}&?LE(9Z0@_g8`Fk=iIjuOl91WR z!k{ZaW1(gr=veq17r7Z3eXjDjzqBn}ejwEknhbo=tsf-!WKB~Gq^<~AkwRI%3dJ)Y zzSBU>YR*Fm2Zgmz)kz&4tR$dJ0jNrtTmi% zpbxg)E)T{09KX;M+ATrzm-;z%z?jHXLrT69TdhL1c zNKEPy)!q8qrn{fs5P|&imlZhV^-5H)q4Fu}0Fs*;`$cI)73RMuHO2#)^T-V!&_jGv zFR(B;syvPUcDUJ~h2i zrnDi0LPL{wFSc3TZ4cy9P|xRY>F|5qx`923&;j-0kwEPWN7Ck@kA{=1#$&=336UtSd6hyuqT|ekd?3x>??RrX*x@F%f`^J94YWDTq`3)3-hQ?z>Pi zDrjQy*ANCa;V(5i8W#x^EDVCl6wC+eV#t(VUy}CL(gJD@Q+AvpqQYM+%Xz-Wo+DrR zbyphQHAPs@wRW=0TuUJB)Q5`GbRg+c=-vBFGTrF$7~ z)zKmDeYX{-{@4>Jm-7LPPfB&etfEB~`ou8o^cS!itIhDU9-l1Q0%g5^E(j+#wjHQO zmqAM{e{czACS)6yO|RdOA34CLt4h1ZFAwvUd3o!XpUJREX6dFD+Ws_%z-l+cn+>+F z2FIbE6b5(O4!8IuAy1l8>pJVw6_I4jh}UE1^%sm%R1R|5i|-z{h`ZM&`9RFHM^fgR z2z)lieT~o>hP-df;_)hq%eREJZw@k*1il?&77~CFk>B91URC755^Mya!1RVpHUdthR`0iGm8dah)fL+2*m3JXvKi*o4Nl1+M zQw{jU^fKX~$$QA`vHuXdN%*ugi75yjA0IP|$Ug@Ig!yK`7K1oJ9fgHb-+y&+nL4>C zKrRJ(mbz}Pa$*J3MD@ch@@to!!$xWrWDyCSMfKlzh#A8Tj1`MyyWf;2>Stkm5FvC& z!%wra`t@_o)9)sU*XZ=|C8U@tvcbyg&6bXdiQ)VXPT0|`UD3p!Kd}@lyx#sO2LEIs zSLfd8K5hP6l@c>L==XlmAeCOsdF}$kk9__meqa?1MVV~t^hCj?p;X9eGb%>lPN=erte^~Rh z%HwEoNmP#i%)irS4Q3K^LWyg)-x;h%@0Y{=Ruo)YXt~bbDJUG^bc2Q8k4j4zbG>!) zg`q>M*s@KuSyX$WbLZbI)fO&SYf6?vJc7sI<+B@NVF7^HcKy@9VS77>B}S;^+$0}U zgloUPQTwF?OHUd|dEk~Xq0yA98=H4;5VzB$(`VbyUh{=lyvDmWb-Ue9MU!=I^i6ym zz(b6fuHctG2B%(yS8vLBok0mR^wDRb|5Ap;_o{;x?_6-H4~wau6vE+4mgQvUe>w~B z5uns(sq3FHmh?#A70UfzcIjk#^9!>NZR=A76DNss69=KhiwCHug8O|AACQ2dB8wA7 zk)_@C*>!5PR=7 ztiayjhs|mOg#Gp9m3#-3h2ttDM<)(v{fuAI}?Q z=_WtNH(K?NVnwM&rDFF}j}Tf~J+h$qWNH|`bnbZ1!O6f3*!Oal)OMhCMol{im)$Gf zMA;%uVhF)tuD70#*E+p$vIV(-aC99i8s?p}t~H6ErRu`~tiR6}lKNpMT20ztJ^Pn% zzepqdN=J-7HE$>-0n-c)a5G8xE79@wJ1Z|Ui(F6@#cUQ5$sP_)U9C~>qOCf5fpI?g zu(kTT#G?_J=T|Uo>5#yi z4hzDas>HGRuf&7G>LRK3|Tg|=PgBQ0Yf{?2H=*2fdxrz06Z5S`olxERz&>FUnja}r^(q9I~(x2 z3WLbt{JPa*FRGSbZT_VA5UH6ZO-(S1kZj{HBJW|?%A~&r8A&{+75qoY^!=Pm5J>+9X2HsK;p&0 z4fky-%~{t}^?p%~gL%d)K`1{4gayw72koT4DrF0Q>I164bQK%26E-us`0rmy5oPSW z!6CPXb8=$qhz%uMQsM=e^{MY^BM7O>LhTDIs}axW#)R@5O^tl9rS6-~`ZInm zrHPY<^D#FSN7Tu~lxr2Yx~Xw7SAEm7d|2azIsdGtht+e*sG~zHYl?2P`Y;y~dmMT7 z06){!-Sh)jTPzKks!4?f7_XDc#T&>xirDk~>}G|QQeoa&zk1<4aOs}P9 z()qP~P&pu+d-fng{{~Re<4!fI#3Oll6g1<(2@t1JHS_r;h4aRYB5e6`)vMER%g^6m zPDYWs6XlD9q9c9BL4f--OTG)6<{xe*ru>X@`k9rn>g-ond_Rd55&{&p81C~o>k9Xo zr-$o$S*I@ozqEswlb*Y_%wPi(T7SXd04G2uvV%l=zT5rTqU`XO+<4lXG$+ru`TX5* z-|w5G0eAfE(-!;kogevFB31{SjW=2BFQY9mG=~p1<`_OqP3#4-;tzEI)i2u4g9~It zt^AS9+_b6USy3mzcX(xR6e+p~KS13QI!z>wiQE#t%4i;D#I%VpN(6$ThkrdVO)l%( zYhSUy2_#dwHC5mry=S+AbCQ@`WG1-|2&@G9(O+Z zbn3shYa0c6ysi4MahInv^;tNs|E}XOf-q~QxRC4&t~df_J>#n{h!7gZhTT$r&Uvud zVWOzxL9%>KGwS)I_8@Ouxm_7{PSpsKyGLKkGEgGn92_iq71n+7-poPL5BrC&@ozz? zICvuT?*|BIDZF(5udbd*49O@&%E+twpq#k$Z+3; z$Dd?}u+dzFRTx3a8N9~>JM==u<*PRD+qj`%h0iu$X*&)BmFWi|$3*SChknF#`7gN0jMhHjUm}tCW0`-qRHhx3iliZaSGNUsgRfk{O zRX_e(dFRzJX${a^@nO1ASg^qH`1Dn+$_Ld`K{A+q!n29yfQ3B*ze zyze@8GNp7AifRvRG;-Er+HB^yhT6qYWM6D524K)sK8Kf>wm}~r9(d9&ggL&lp(4p;Op$*eDF4Wlv5aw{75q3 zf{~wp_v8KYo&OsBY3SgA+cN>|E5wuy;+^QfX0}@^R)C(!YkRoQdw2(XazdK;e7NaY zrw1}t)QWk`?4tbmDmf^{_O(HQhEq`xSKN;?bhz&!1j}v%H!1Vhhiz?_M8@LhVSDaN zk8un_B1_x8c@t_3;=LD5ZTESzkaZC|JFm+uD# zNJArkLf?G($(%bqG56KYBVb}LHzz&2)D`7i1Vre=#^vbVXM@iL-ZSI)#!Be6cC zbN%C|wYP9782Se9s3js=g@l^n@QCX0oPqLITiIS*FL35<7(CAvys1>#;n#PH2l~@b z66BVE*_+J;K4;ck4%j65X_fWjC2ZCNC{=f>IBM?PRkliTb}QFC7y<{vg|1_T-!j^U zA_>EY5ykoJIX0NG-u+DXqv*=Tw3qg&M?aHpNWoKqPd0kf>?aIZjdXcRr@7S4G)F@8 z@4&th$H?C;V6UfA(53Yu;4~OntMN1pQb#<39uQB$8yOoeNI3q|bdcb61Mmjv5$=A( z>nz{Evl;hOm?HVw(9Otzz?rni(62$qg_y#}?CL$_XN~L(XP)+%-foJ(D03HNZ~U}N zbZ3eEs&bryWN-ybaaAkMOPp_PLr(X`fCac!cAZj+;EWwi&vL#0q8>q4^OJJc(?kdU z37*_hPe8?K{B!tK(xN?s3gJnL$;-9DLunUl@TrL9h4ZJj}#&BbK%7f5#{bquuuba0QAAwZiyHd$| zJf@E&g|^OsiHb8i(2wQfPYoP^ zY&t*SWDRPzfS1-JB0OMQU~bTL&A1;3uALSQ_r=TOG|td4tgee`@iH$sKBw7jVQ72D zoz?f!{FS_ADiv+nMmlAFmU{{_JI~yk5u1dCsCX%Gdq6k_7562toA``YYK;Ly{Yk<7 zODf_BMf*R*yJte#3wEYd;Hplm*JB*fdkr}OZ%~JyUD1o>yVpWA0>@_4r>ANI&As=$ z^t3>Cx!c_x&kKHmTwbFKZej@dTI|N1>v<}Oy0=T>8CB^6wG#P#ZQh%J8>W5&H6Yw| zkzb{d(`LBv)28x#?tJ)>+qp)D8ho{K7x{2J0`7i)4{{7dLdXBT0SG1o@<%dwSH9Qe z?_<9KXHJ!u^;c}1e<_u5k8XDR*wP6Xov5MoqxS!{#F?M{Iq;|aA7_+Hoz!l(g^Y+a zZy6E2AMIx();G%fcT9L=HVlt`m-*RCQU*ef4v-+{1?vBnCJvzw%8^bBb;sx z^nu)YE*2a;cf%&Lj8w~v8F@)2Q~>?)#N0NkM7HqAoR3dX@aW2S{hw=wy@##smR5d4 zdwUEK=@2XQ00Ty?ZkSg6H=eHTWKe(h4;xJyZ^!Rbyem!(8TUG$pW_ssFrs72!kx)o+1h=a{zuc?coF?bS$4Mf(&s$-wiyiD0wx zv5CJ!^0wJ;M@_i&c*Ev|=7p^`c=0=5Ef}amlvo-G!!WK|;|)-#a27OoMmRdjbe&E< z_Uut_5i0XY;t;HV&=B9aYpsmynWZC2a2jJ)3S#6F6g|50WAlL|CL~;poV(vbM=0>~ z85m$e(}#=!c5sVV9)CY2C3`6g4>&fC}U`YVupnzY%Ah%*LA|Nl373%p* zCu&)(RVPzHREnuS-NG1c^d=n05#kqsO&51BEv;JlD*MY~k+%l}_MdR(xE~hG$ahKS zPP{6bYrTu;TbxUTA?r`Ct8U*V1C$8+<`lYnRlY4ywW5`e8z!LQIL9VVIy;5(d_4nN z|E!9AdJNri0D5@XgbYI4w^9u6pp#A(sN$M-2~3^z3IR%ItjAZcJpsqhf<8;W4YRD2 z#z!KUgrph-x9)x9RIxb1PQ}LE^OE(E*bLf z<+syE&ZdaB<_ba&4rP3HMhHd5EgfEZo1{K}B6_+0BVUNuM!I15pI^%!iJoFh+Q3Fb zb6c6+af+rN*+XaV`c=-WQMSKLi_2-aG0W*qS(J2#1?0ssLlvAQ(4kLNo^(x;Bz+Mb z-gyPp?k2z|wv1ckdZ}!XP5)OFv(Kw0EDVw_{EhJfT(o5z2Q!!@#ULHkhRM_T8J!0* zB+l)O%ClnZY6|ae%;&fH_C95(Weat|q2uM{tHVPk8kVW&a)l<^NhJP9Q+Th=pZpKa zeii#=k<&wArExJhFb{DzmUDh-sVD-~$PkYYRb&SKb@=W&wlyD9)djyY=M!KamQ4<@ z+eE+ecrg&o#>0>tpBG~b_)sk{M|px3Zho80J^OP6`&sOHSSaloO&B?%)3P)g7&%SW zTkZi=uWy=U9!)w>@D$Agbw}>J@>_BwYAZXkj}>SLF*v+|HKOCChU)a|bAL#Qwl@lm zS7Q=G;23O)-i^e7uNlSuCeC{O!s#kXcafyU@L6%=1glR|sd!WGpfWaB#hr@3uBL8v zgp9Qv$J0cZRBwFyg1u}$mFT%>1TM)bBnD8D<^a~@o|5R_3Aa;gz95bjtnM7=lwz{c zHo)l~n~r@mSKZOElM($nr!d1gz~iTu!`S15T^$`dq7?Pu`=(JsXx6tgz4FrR%0y=T zP3XXyOd&s!i$0DYI5RHp%&Srol%7IYBJmb-l~2a04>`!UkYV# zwQ3$OoA(kaQRC-Ri+G;h%U|mt-p=Etj1YRIJj6u#__Ramj zJC06$C-}U2`(t+kG4P9h4cBj|l1BOSH>#h(8Io2~w5o)p^@26^^OuD#+G>n`ic8)_ zUTfA(<*ex2mbSZx;tGb*(M8Xb%)RPah7+ocPdsNG6dV#YA zthbP+ui>jC_Wpiv8cy@xC7ZThqQ(F>xTH$7k~_T>Ylh(4@nFVusprj&eyVE^SgoJp zvL>d~zhbg-`xj;o@DL&F1z41l|OT;ZiUhX2JllS>&#F#e;-1%%57!#83jT)_-y#Si!K#hxUTqwy_n+-!slAWiR+f1=+YSZ9hO z43#@qou7Q$s%y3- zX3I5o-#aF0-LZSe6)JW_*i!-)TtK@GP2ojl#YCM7Z){l-kZ?zJRa4YYt8|SMG4D&EKr3pmpcK}+PfYnNpYf*hYyQDA6mj;o}Eio18f{F#IC0pk1 zACZ)mm-*f)cR$~RESV_p@lkc0N`JKaIz^sp)BN9fkbx9WX9?OLpPcOD!#;49h+EMN z2)_m)1OAPCbM_VgV{{}Tcs~@xb9+9R_KS_b*+xb}<(OxQEK~HCvEzT3cHB=j-nVkcZsw$UOP1ZF7T&iFe6+%0BO@SK|EOYukze2uxjTTCzsSxI zL_BxPXeI@|?06Md9?Bt_klu`ovLoVj?De^XuE^E@cKc~1^6nQ~zw^5v2`t_b>;Yqo zVc(C(c+Dvbapem6h|CcS_h9RsPN6qf48}HD6xkDYU3;}Bp2?ldLv`?SnG#Itq~rnByfN^aT=rad zt~~`ysKr8J$yD6oEjuA)0(5v-{zm$MhyIL?Fn)Yis=5rV6{Zeb0uh$&L$jUf>u9IW zvvjVywvzZ#TMV0VLWw=Zowz#_y9s(I$Y1AYH;z%E(CLl8L41wFfnhf;Rz{2f)8nvq zcFgJUtN8Z&Q!^7hFrQ_;`SYyjKZBqF8pcpXV`byUeCS|(2XTeXk@e+d)R@F;yiaR_ z9cmEXFV9`w?6|6^7;%6ClNIrO&b>;V=8rz5JqYP-xz&;L?3F2X94?5k0F*4Qyg+MX z^|b$#PPGRAQ_Q9$g_oQ6M}cz(V#Y#7dH;6zLT8_R=b$eIbqr2K$uHcpPDu9HRx60w z9uugd`X-Keyq1K~gC5{;@gDC$A^h>x@@vRdDWTlbD%}T^p0EN72Ee_E@rKci6HkDh zkk7*l$Sc@+2~h9Fcd~X0_z21knx?u^iUCnac(QoZ8_V_!HwMfI;EzBhx>dC?fZp&D zTjffn8&V2|`&E^Vcxf6g4Bi3*dKutz2Fx)FjqfgwAG0WO6zOs;aYtS|*PP8HeYWZR zt2vxpt1kJ~H||B(1qyXSk{*Gd=NOg^#h^*|Be}-f(A%Khh`ldPC#0%5Wr5)bb>Nn! z%bm*vFJ8*1e41#l@7@2>Qm}4sycF4$u3C%YXgN1;t`M$iFf)zvy`GKOT=#CCO>c3+ zVHXozATv8Ekg{%JZ6+Y*jgAw5z~+XcO$M=wLD@rj8b^7oCP$V&K(+xb`=4ysZ_#C;+>Mj8q8KY zD3=iyD)@~Fon@<58TJ`G++R|X66ICTnhNvGdrt&&7N>R}Nt=1)JjzHQo7Jj#h~?Oz;vq_Lx)UkMCEZaz1Dy zAnr%{qIGn6L`KC0cN952<(lbjomIU1X_v#y{L;`bmw=xwrd&Gl0ebw$!>OO0Sx-*; zJVJ9yd>%k6)igNQV|@pFF@9tH$JjEKWJKP0V};Sxp@s<)HhiU-B8hPUih2a2mi2k^ zKCg{led>I3qrhZ(5?k7T*ofvB1}B)cKz_Do$nrZU6?)a|exi7?A>rHe9aL9Zv*rf9 z;P%!XsX@zv>(J>Cjn9fzvv1%Ucs=EJYmq^*YMyqat!Mk$c48vk^!qy8OI56-!;--1 zAYe}udq4)#;nUZTAK&o~hAVJaOQ*&J-sjcR&NG$43zQ+eDpI=o`eB4dE0m-czuz~d zB{|ofGj3!OB_XrOp|jE1Bf#2`#OUbq@-|85m_YPh3X*9WMxcCZzI6A#4vQ*@#Jp0s zAlS-;0VXC4_OT>6=4|@dwnJqgW%VqflEptu)iqZ0Opr&Lh=3l?YcD4eydT#FYCI7f_=(K^767f_*#j^4=45C=K*^*Vjn20L%7eLZcab zyU#Xr(v>EUep3V=R3;Tb1x?dJuzDGB89T*)lrc^AIZ5g&Fh1j%(U~+jYlu-g-s(Hf z6i6lh5yz}9G5Owak8wa9H^AyTd3uZ+jrm7?2%bm|BPaUUu5Pa*RpA{=jzW|JgW`IX zmKlYos)FJ=f$Yz2c12h_i)WC>#?q{jZ{6MJ7jaY5w@ST_Ls>fMDOd@2o>JDLuVCp@ z2z72qDTBSe&-;zL0-@>e1D4uSTl)bnA4gm8&3+d(zQ&)jOQxs)XsGjG8$Kvy^$l*m z^me{Daf(t?^K@y;^5uLY0jzeyS*!J<-Td{G9&1i@}+!9F#KI#{aNZ zJ#(g`II`qxHxrK^hk{S~NFK|2bK`_i6=^20SY6QI3VGmQhFWP*wSC|vhI*1dzW2Fu zK4_rHKhUTM`o5o>|Cas5vonkMOVx0FCWt!@L=NLceKc;v;mU+_Dd~vJNX?CMo&HO# z`xKZ9&t|A5kzW+g=BPfesP@m5uZm>L2J>2*k;CgQP!w*tZnuFW`a|z<2s9mjEZrJ2sEE^DIVnE(6YLkd!_1>pu90FC^$=_YHsi&=>x6V~-dN zv@4uVFR5v1SP}`4$636Wb-&g)Y3%=<3_7RdV@MobH%b{#obA$%*homAS$a&x41D$z z_t{`bcR;YDTbdIZY8I9+dz&E+MDQJFrTB^QT z?&_g*H$O66`QUGdST+rZyBklahej1$_A8*Xvorh12NwH2@QvTN*Q@!Z8YY;K$GS9m zuZn}vY{Fl8gsfbUvhvu)#f*;YVCXq0C?MUvZG2^QL0jiV+`7QxUP^Nd51f_XCK8qm^~7kX6{onZQI)H>Q(KLevsGu{O$A%A_F{S zWmFIU*1Gts+Yo#1svDa>bLeOo%%H<<;gdxx;IQ27R}0;Bg9obmEUvG%_ReLhDr*a< ze{;f1Ub@ny-X7*y2_DPYV-S@rWX@CX;hMf$PrAafZulZ1-oGr0$2kXb`PmFK(`dTQ z(|%Ji$tB;DVuYhuO6QS$-bT_(Hod2U#l@~L`XQCw*Rzf#u^Dv*j$!E%(6mE6>Rqn1Q_AgwJiG0231!<00@A2#zLVKGbgI~Czm$Q#2QrR*Hwr^QoEX}pYszBvz z)DUp(V0_KbU)K%hRDaGGU zi?YJ0kWgttnc~1$y|ZS8ll_AeFWnCf`Bgj#L}R-1YB#N40anaVz?eNtGSbxGRggQA zAms(w;hcQ8q+;eXrE#|qWxGn!FrP&qI&s6?{r#N24HpIN)=x?bgcDE41O@Q;For~e zggy@Y+82hy<@pl>{Bt#gK3Kh3t4FsLD5&0+qu+)L)A~FWCY_?{K8p5-=s7dZXcYvwu-AI>SY3j~~jEx*C+l`v|-HejIO$(Mh;4hZb=!w*#a(*3ovJROtl$V5f%^;5I8Qif&PA*Pwg^LFnx088`}FxV$et!fc@j$qYu^A zTlbD96b|LcjsOga?r+LSpXy?x+mH`e0(%!fCtD>|2b>7w32())urM)|q$hPhuajB19m+q)+NGR7j1S@y z_2*IQrKI9~!`27_y`Xu2#Y=wTluuo_6YGK?Z8=T^u`Pva& zIM`kEG+OqUr+fPy-wl%>&<^H(^(#II*j(&e4J`49W3E_{}^@-y{;eQAe0@G zc1=8WgI|6S!BipHBl&?BCZ>kRqE7s(iCa%<`+h=2!oqD>!jm39bPU7KjdR_iUSi0~ zRN<-%Jya-O6H^LZ+fnQ@dzrM0rRO0Q*~lc8NOk`2Vg3-ButJ?DYQ6Tl#5<~RaO_5tIK@h#hQ$B0Vcz`TLqS4G41vqST@Hy1;yfJ3C-PN+6I-6AYYUsT zfz~b>Q$?&AJH(kI!h@tFFjgo98ML@G*}54<)u)(67bO(YRZ`?%eeApz$A4tt+HlM; z@w99Gzgs`o!ahnChgNG*wArP4k$?G_iz;KP2H6!1!+(?TX}RZ5b;r@@WnJBgl)9t@ zHXV~gLLx|53Q?Jp9c=6HaQ(YyO>Iz5GHl^t{?HaYE{K`|mt?x&JXl&_4zu!4qyP+vM>6Wj-c$e(_Uo*%lq3dT>KjkPPrNs9Jm!TI< zfRB}?IU|G{@hIK!W9yKBnpd((3k)cnL#c4&#_Pjh2jg*#_xFKkrf>Mn&r9OsAZeFa z!)YXtzpUoUJWyHB*M`zjbgijQ59%^mJJdng0pyb-B^q4=6e2evh=j&l91nU{3A)0^ zeckMqce`xlxKR#8hqOtYGo-OM3c~?oQfdNc6Gx5H6AqM~>C;q#$sT46O`d%JYwkV; z%wnKT!=1;QP&C_~zitE=;Z_E=YhQ?!1Rk&k&Y<zi_kx0GA3YtFy#4Lh+gJ*w>mF}?L}t)CLHlbueoea`CjVajyZbcRkrBH# ze|#J5(VaXVEnt_COHs9LH!9y99iXH7$#5icmg)t}kJRZ#9-xi`nUk?3Oyif8BE!?x zz=!ecJQpCEL(m*0$Z#~7@Xbe*{H4oSgV>Z-NgrNf)Z3Sk2HD8z1SiRea#4AwS(W<7 z%J5cE+TAE|7G9b7FGS(}ApND2Uj|2YwUAib<1_nKloN@;fXXm*;xC)M;wxgonDtX9 zKlJToQxbn+jwhi7R4!OYGLUZAMNc*lbQiOszi$Cfyvi=>r3=B%k?4R`wKOw;bzkh< zajoiAMv-g=d`TN5ULt?7^nf6urP2siP0RMP8fe@4@I-N9MrJfp5>qk~fkp|d(Bg^_ zG4JAIZrxI$Qq1m)j=5v}Bga_p2ii*As$3cE&#sV*0zM~WqrcTq9^UGR zL9c?J6&0^Msdwnnn{GW#gCj-$zj}aNvm29cQf@j%K)w53Ap9Y;KFXXraZ5yA`)m+}#Sr-BPT@-3jjQP&Bx^yHipq z4#hpV2MzkM#>l^(PXLgH3{I7$DY9qVBj%GFLtuzP)F{HH*`C;+bQ;ZD zzaybu0#Jga1`gsxca7^12uPy{#v|wX7dMB)!sovmKlx5ssGW`7$rP=}#K9;cfo&cG zWP$o zOn!-DKQ+{m$uept(5lDWRj@r4mpV4j4)@7eEJ|b#m0Pl##U_*t_JMdmH=>u_xdwJY zGDSDqQ^*xH4Bod%pXSd0fFOjNh*epQsf;xin2tDdt4RaEx%y26a~|=Rm2jI^J2CI~ z+C3GQL!S_;UQ1PD{{m?eK6NP>{@X9cEYLvA`}vBvu0M&G)<}b9@n1;|FDP17;TCR#a~w9WVzER zL&k&la3BsQuEv;@EX<2uj?2fX;8HpWqWHgl(C?{xtlXgI8mt1EsUrI*4u@E^cd(W! zP8xHzK#_naizN?geksDF^dS3@6!Yu2DSQM82N6A93)om*K@W9SZT{&pzrbCUtZ1F2 zI0M~abt{GYa05M9H>g2}uZN7nZn#IV3N&L0sQx@c>qo6-0{1?CleC5~^l0VvN&F+s zT!0AnA-8%nG>H`7x@u^aXN7xVHwzxkQ;;K{;MEwp$R~0y84J2$I&t*cmJ9OGH;`Bh z3+OrvPpZN{%f$G-cN1x;0|imh@1yk%--jGPOj;=x)b=aEo01{V%+tvxW_|MyyrPgCyJ#u5IE5} zYpT$*s~!i{YdZN{!xJ*Am4o6c;O?XO!=4-Gw=vgAEX_8X^-ndt(kfwr*6zE8 zKhEO40q^@O^avv*z8i~4`&{&tvkF7X^f_cDYi1!-LG_tTNbSBN*OEeW&;w3%_3Sq{8GQD;p96&Y(~ zwU>J-=u0RB!*$#5wwa-Xx#bo$HqdRAW zipv*Y8Ee0_vr)Zv)&yWePdOzq(&#BjhV4Y%tQI;MFWc`OZtVb(d-nqUXCm*Z#s0dd z0hwtiyZ^z(i=VP+YRAVM*MsZDwpD&g#&QC?1FgwF6xQ3X`kaCZLTS7HM%inhohsK8 zt3Ki%^w#_LDWb>qJ{(O{WQRF;G^N4qNgfV7b820wblfGl z*ph}yI->L#NFeso$Q9J4|kF_VpdK84EDGa5>WW zfzsn9x_f7++5Jb){C=JX*jNVC3Ttom(Gl(EP>*wA9CJA8yrTthI-KyR%u0c3bfgDC z{MEkmFwjNYob-#5^uo`3uA7-~OdgNNP%BMnp|(H)odTfHwJp=DIS;dXOc#@YrSx=( z;MLwwku+Nf>8xjAnErLx)GOz6IPWfM%#%QD@0ShK9Mp54OwJ$N1EZm_WL>0$_%Z^} z>xralO4HsJeTkzFQJMXx`R)AQYN6ss@k1n@N>EyzBN z!}T{RH0#>;YlGEnNjkt!fXD4|@t4gdm6$D!*h5-I`4{nCBzsYV+#C^Bo-?Jj&oVA{ z%fl0L&x0i_xiCpTB+!=0gr2Wv(=%+&Ne>)G<_fB*b)|Ai)3VYzyy!DN8C`L&F!}XY z+X$Mvx$Og>r01O1{AERGYx1usXOPZD0Br%vUgJa{#1j6e8SJ5@k3NviOwV>>WSX*p znG?)Jys$&`SDfO@nh&dT+ZyeQH!nFXJSo|PgI8&TSrat84H;p*x}hyJ{u=?y4aK8YUsvtWMV zidYnV%|-ttYt+Ub6c7XCY|qx_zf)dmW%J9hJjgnf9~K=>S-L$5T6$r+6w;JT8*iX@ z19-XZ`pGXjOe5f@COeX!Z#x?xedgpaA@U+)IVZVnlQj|tCW+xjKkMqrylqJ#NaSF* zLtiBjqyY)V@sr6l)c;KSr8JT#G$kjPiGwZjD-+t35HD);ud2MZmMifU$@o$QAJ&HX zWMP`ZHFBTCsp?9fTKpkKR{4o#+_~wAL0RbHiS-P_mt~-=T)`2iy5Of)n$yvBdxwKt z%ngC#^EZf`Rj~tvYZaAk;UmSn9jME9NG##aKr`QyrJtc@QZIJr0#J<`L|#=tdZ@^cws6Hh@#hp^KIolVtMPqyLG7N}6_J7}C$=(ygI~U0$UN#f z`>}`*KPzxdO9P%EA2iynv?L~);KJfz9Vuh8l06YfFJGp`<&UD9eguL8s>vjv#EdBD zf6HMu^32jJCvjyTMx;ye6FetJ3CjnOnyvf6-pU8y0W1l*@$0%>HU5SjKaXy$RE`@VB$2MTvGn4o;YYJ~|x2Qbh zck+<2?xb?xtUkPcKnK%%1eigKEioBc1O==r637N=gsLsfiuc?*%XO8SgVQ~+EWaTb z5ZyHn@q#csqf0Ze^LiEq0(!SUa{DD6V@1$5v>o?Jm-I~iDl-dO#vN(Wz;MTqRyUL| zA+iE=y9Qf$lAN8?`{e^q3@VT-Epy77^vNX~U)x0^EIs>Y;eFF@7IFAYw*q92 zBvff-!84uw7uxid)<(aX@jRu<-W2(Wr^$Vo2<$;Ih*NM&BiA(kDdQU;7Hi!To}|7+ z>DQIUXW?ET?x&=r^ljYkx~cK$IJkuBGC1L0^gLulM3h(Xi!gtlWDn;JA>2`U!AsF^ zp&s|XG!STlhv~&Z4HD--@Jjemg8Us3UqrGYuaeLkg=(Msk6QzuI1Omf=yJA=nMAva!TMo|ca^Tlr;>&75whCZeMzNbn!6;sjcV4@!_=b27vXX+xY)_t7eS)l z|9BHXzyj5BsL4Q^4+MsRtgo1bl^s{X$}G;!vADHw`KJFt`>`1ur^9^>-vqybu)V(@ znm_^HMdovb+ID3l`mvj3B6_B;-6Ve|4*@Of@vsW6Z{x6NB6iMEd=`#=LI1Aqf#@>} zVX4!PX<_;*A`fAS?`ol?v- z32Cj1dAN!OnnuKLI6%sB!hHh@5P$8e61nT=b@E@2NO@6b-RI)rD7%wL@4jV}UPO+a zQTyR2jea7jx`7RA3IM{MBdHmJl2ZkB3%-cAyq7`5nT~MJ|KqCtl|gKqX(ueJ{+h58 zTNC)~`2Jx8PS5-zJP9!h8ni=$mG$|+on5mIOggJuDN`@DZ!5Rifq!mp@R>eO&cwpL zr!)1N6&HBlrd0gP&BfeQ?`-f;_rhFX0gh}A2BAtKzggpY&z_QI90K)K8}3egP=c72 zwH-Z}Y_84z&n<>`v^3KyM5`G#8g;h?C97aw%#rZX^LHz7gsrgQGO~k!l#p66ch4l&t80iAqVlglkGpl-Bx20K+^A-L6R0WGI7P z-D`q5fhpD(|1hSGum|`hRDgh5jW?fy7&cmdhpg)V5yo2S?M&evgSJBKw@brqa$l;R#t>U-81;_F)u7nLpxQPb0PlYRiskIYh%X9K8RGL z(mnI+ZSXPUms9TqEz9<8u!Y_O*Vo+cv)sPBZK%xHEHPmNYz8AA&2P>K{}@@fDwnBj z{jRYfP?Y3Y^>f@a8@_&xUl-sVR^CXNpgS9i)GTLQl90#&8KjGaehm}z1@6671p2BN zi)id=eEIUlexs*anIS@q`~ymW{>J`|=c<`m&DK`_%Zr?dh%mJFk|VB1lmT!1s_c9k zOQtW}0mB#t<)OZ>_Nmsl%_>`Yl^!T~|3UixdNN0Nn}us?W8oEyR*W@=s~KObqyhl6 zHr9?sz6Qtk^yK!)iF_{3lHbS8d18Nlo{)?8hJEmj_olp2l<9ZX)Nj4O#dW-oroVv)V~?eC!vFr-)>mWXNL)Vn^+8S&%)H(ijlZsQQl_gdZs@dyUc>FM|C*Q zld9Fq;>pDEShMM@XQ5>^+#J2DGm);1mjnOkK(fEQYw#8Pb%C<#uV%>zs<(H)7UgXi zMC{u)&u-kE^*4Y!WhjvvvyA&-ur4^SYzo2;S`sSHVz~a?Z|dc= zptZvs+9f_-DcoO{b?_vM{cJiUeLj#31{2D{xG4^1oq4vgN~`fOmkFv&DQ#|$5g!vi z$1#jt&kpHWNoDSY7Xtas(}^DJg7Kl;Av|l6M7@Rj50}Vmenp}Mq3Ha_+1DTt=i91;veXj9960d9Nv4)KP)z?mTY4E^l%%%n=qyXO9u$JyMa5Sq3KXlwJ`=z;gBLRcJsd zR-xJeRM_mcx`;Adms)a4{0Ebgn)2v2)XL``H*;RHiv_lP^NRk|Y%?0vfQDg>8DA2%d5wu(F6Z~6 zPn84wl(B14GlrspKnZE&H(!q5GmlQ+%9}+1`)|K(7JvUmUt+`h!^|z=4|5{ZMCjPb z(eCVNV%Gst);U}DgN=}G3iWH_xIY-|Kj+`te3<6r#6I&r%XAb=X9}GqEZ>rZ=mHs` zFJSWcrftovurM?FnkE$22*TF#+31onK}8+F-H97}B!!?`>DHoLi6w_ux-`Z*!Ue`DkX)i=oFys z<|j}0IZxWz<6x=5`cf0mEeBwOl-KC;muVES@Pg}b<0jczQjI4(tQl^XrBB#+jU{#- z(HfnBMW9LRKCWYGY)kQ*QF0T-{bugEPS_KT;Ng1;n7BFd~n0(djgj^L;~Ttj`4*doyB0qJ6rD; zZLNMs3_l*|2g;my4_;GUa&4SGV~4#6t`DR{0>C=Ir#`)~AOFZBI5r>ttDnKUVJaVC zehUYAHgmg9kHK@e5$LajQaz>ZMIGtD$Hz6=;6hsVyEZZGFHQ2F?FWg~!{x~=%Z{Lv zw_pC8v9qhs!31J`9`Eb-2fYW6ElDzbyO_soUg)8P_#4#NYZDFs)Z|J~S5zcG9+I5P+re!gwwCHH-*$OMC^p-%EXHltLDer)(db?FGB8K$EH3BHfF>zy8V zOf(w{j&C>*X0ylEq~ILO=yUloOs@DJ<+C0V`_C#sM)tYCKDboqZiwTNdw+dE;-z_x zkd5F8J*m~vp^5FU)6jJnJ#@J2S3`ywZKywX$c=ZFL)lNy-wfW{6TlZq9-o33*O9}b z$?E3v$R}cI%J%+!F_xMq-7G*K$&C|?f{}>=TpM$U)Q>ll(UHnv5~91TTUo9e3h`Z`J`gud>2euDGH_)g zhs-b}BVnx%DO3+IUTs`GiHt&}PCqn(j>E z^C-c;JrSPei{TEPQ2M6bR+y%g`$w23zNmf-q2(AN#)=*XudUubQrM^^6X-(0iLf%T z5?r`WEabUapuE6hIM$+UMjS+MQ@k6&T^alHbWp(#G;s8Nzg|Ww;5%JCcN65j^S?$K8o9`tUObN;t3q@U`&-S^^?pvmfQv z2!a82|HD$ZPKxhh;@#AAbvUa$sdMveax(VgY5a%=Uh6gf_~z@o)0>6|}UdkGQ`lMDv6{8e@&Z zdF-dF?E@P1_s3KlI`Qi=mxm1OI(Tr~DPiP6gE4lN4AVQKcp2bo|@X zrO2iO@V!)u8lm#2C?@Bz-V6n;->UJS;G2)+%Zk8V<|df7H3xmR54`KID7Xw=mj%l` z+rOQ`i()&*+564flEPl4=vugV>npjHt^tr%X|P9wOSU}0av*qS9vkyv5)q2if!TcD zEfI3<>SePo z>l|*N-jR;V0rIZ&<2ARKZp3bzdgh7xx4E+P8o;RN;COn>aggXnJYEP4Xd^!C2M45I z9{W+MJRJx9{yt)_m+irY__IF9Xuj$1*sA!3da>rt)3hFs;WK$+!jO*cxgJ}*BwZKf zs5aixgxZVpyajVphfK}AF6J$*C zkPM4_yuaFKxJ%52E5%{BY=m)Td06xIl{$GSyuQPyZ8SU0eH00l<~D@48_?R|0IjLKk5j7OcZ^$Ul%anlz^!YU;y@CaeV(@-Ke3^9 zdWAFC+O9*D@#3q+;+O%&g4psUy3UL-nwSMrfYp`H%AmCHN8AFG1XsDzJV?F7v(r5d z^;Oe5Kka|N8eIBu-W@UtK$+Y+T-g?_yq?{bCAci}S!2>5$&>=8wahNI&&M?ts6?>4 z2@6{xAAFkLdFh_(uKtmkR?_P;vyb1?(@^^SVv%keAW{|mX{^3H~~$Fu}=m(&~ZK za*Pj&Sfwkt6KQD#g(@aaSC-K4( zxIHXPi|}l6js6)CKwKqUs*4cYB&-Wk77TO@tHLVAj$vpZbYG5{g#zb%9jR%|L=>gU4SQvSDl(yyI0LdbNVz;X5i` zzkz`NNUAJqZn1p$MwSpocWU;W?7fPoJ98wJ=*sIllBSOY}Y+rW0)K5XPhU@I9j2?XX3= zqgo8^ApdKHw5;kj_|YmE5IzS9V^(r^ziG|`^2t1E~s68NMP zMBMLkYLqjMkt!fCRiMkGeZU68i)Gl}slTk7@>*c}FSvxlYXvFrjI^|YopPm2pA~M> zch@e9nqwE=Jix9jfC8J7`= zV^Ka;^D7~PnJnNh*2{NHufuU*0=Y7R4~dhMPAugi*ar8F*<(h^J!P2)-;>K4*(rzX zh-)QELO_Iu4mOoy$vwx;@!=>%Aaseh0U157;~iLJTE0lCiQkC7Y&6dM;8e@04SH|Q zG#uv60_z{o+mQAW-~1z|8*6a-1f}Mo1F9DVW-0B~D3ziO3sDHtMpY)%mX$8PM`Oh7 zcRqU1sA@RIR!vd(N2!*fY8wFk^I6`!BM*7Hs`rP`LFW0NJ*X3-SOk!S_BATtNe~xC z5`8TV2`}%z-Ak*%Q7}?qoe_dlvi!cch9}fGF!Yt>mM?NKaNn^dEKOcxdEdle8gtD5 zJpsmy4C3Zy9+id1b$Kb17%fhZxKslZ|3|(7W}cTup4zy7%+#B#xK(Q&K7A6U_Paou zvu0L506^72zn?t-SO1VyIN!3(cJewR*sARpf!^3aV?+RpOh`K?)SvWwvCr4WJ z*B9~Mkpmq-k1@T@IeO0hm62xa8iG7bn8J}(FoAKZr)9!FInl8Wp|3j;Msd8cv`rxg z3dV2D=Z#buG8~6GChkFR5;-cx1oCvUC3P!K zo0v6epGIIa4dV%P#xL2w76@u-#x z-x?>w;(bTCASa|GuI;k(cP>-sSC6nq;UFoBd)APm9h7dr-pL&-;eLjczhn@uM@tbM zVa>jAf8Zkdq>|xfz|{;fyG0wI;C+W2TDXBs~!Jy%ux-?;kTl^!?_-i16a30=B z9!-|Qd-oSHEDGXy%2fKRX6B;|bEHsSTE-@x)7#4f!=LPcV$bxwI^y9e?agAEoTjqU z6ql!M5+nQ+qai+_-bW+a=8wDi!@$13T?fI&k3WiE#i z*BLkUSOlWB&r^MFnJM-4l@6(pZxUYWY8 zTRV(=En(sS5`RT1JVL@L^insH=)>aScSXZO^~@4_D$dJ(`Xe8WwY|!Wrpij)pF`J^ zfEWl~=nbyQoi9bhJ*Mb@$Ef%9zPmd>^Ll{SEp*!GwfmBz_to=?QvEgu4BMVfriX&E zN&2+1(uf>TmAk80c3M+ge|7NY$2q&r!X8b2S>(oD41{Zbs0oV4Bm*0n4P!G$x8~UdBIv`uO<21pWUD zJn$vHN{PSVb_jBXJ)4oqYs9{`jpS5jPD;@VE9ZQJi1Fl;d?nKhZOttaGx|?&UxJDA zBP#MqK)PpxNAQ5eP2{XV1D@lnqLA2+iI5=~*1S!(ncKNUVH%c+m-G=v?R)>9yx#5X z?J&lla;X8aiM8Q+7ngL=OHw!YkuQm28cs&_f5<%k>I3;d>ZHJi-*sJFX`cWl#d>mj zdjo3+RKCA)fM@lS0{;Q3XuP2;xglwrT+zV$4>j~gXB=>8&3>?U|4&LSz1wIAwF@thU z`sD-i0~#vmJUf3xS`_EYCu_*c$GANUhQ;(g<{_dk5yXiGB7*^PLJPwZ`#EflT&Ja0 zhx2Y94-gG>xXulzPk}G_mIS*YIc%P`chJ>ieDt|6c9a z(A7N;3y$)Zgf^b+0g|*$c`2qCR(kEBKF?9cbonTCCv74HuH97!BUXjc{yVse>?z}q zc+_U4I>S8%{@lDVvtK4BH1ZuKqk5ZKlWhk%GRu{0AW)b7+cZ5BVImdfa+_YZu-`0Q zec)?I$z_zivX2(&mQJ|L^i_)D-{&a-|6mmt00D<&p`--%lR{S;6*gi_e&5GbY9laC z7op%=Z=5rp>VFoJRfamCk~7*oJxtmgF@CdTA7vjLqoEyV^$p32Mt489(s%HDE0yZn zy@PWPT4v0H2OL@;wiAZz7}1Ic(L1#-@0+gP-_S^IUbzY zK;0`M-f7LZge;QnJ1fFph2@@uujRs9$wqklA$#7dKKF3#Z=hPymI*6pvH#_8Xm<=(MJoPL{3m-y>*V}dZG5i6aDEHCNk8%v zHO}TgG*;~7AozR#5#B|BO-sygrsVJyyXGg2ZLdtvN?^*J>Ru;?w+*f=Y#DRkry?%; zJZ=9Uc@~x7RGx6po-I*)`1MM#;lKOdm8ZSYQ<&DUmE>wjw=Z{3Im&2@WOD+4fklXT z9Ssy28oA@AjOdqH@J9HsK>4j-J71RNm`N;%yjVNHr1^o&dxTCesJ|?;AC^*pV%6 z-?qTbu`lw6x88o!22 z=sTyw=7J66UJJowLi*jLZgyjEz(C%Y5Gh85T_=75gQ7zzFzSB+THIT{yt+HO`BXsP zXEDP28uvN@WzUqnKZ+P2p4OK-g25$=Y z5MfRWj`8L>OgKk6-`c$#`^!jge@;|(T>v_`rNXb#t4ONG6ABvLR}ZAfgq|d zEv7{Md1$NC0HQFu^sIsUXT9NRH%h^19zdDy|I{()2>r-x^K>u-Wf#P!jPdpfLpxfG zNs_FVi!{X1p94J6-@!~jiS%Cl3irj>AaM__vqmx#Rmvw9*>w(zynQv$*!)n}+dKtup4*@O>CFY;O* z8k3Qu^m)*Hbo<4Wka^KlNGMS7b2Fly74u~6X}Rmw%Y7<-X!WDd|3xsyh>D$JkaPtNPv{f@CdShN|!Rf|b!8bR#RL zyhI_Sq^NnV6i4pwEOn|e6Ra@XsM@2MqH+EYoPgI%g41~t7xfx;suwvrf^|{FSFJAe z>PkM4WVAJGiEDf~W2`F*O@D}sJToWl})x7i9x5f2XsvR!mSsfQo)kI2<7zmf}zZx;>jS($c6%e&+1T-JG34CgNn_x3Kqu#WstwxVKzy1B2{tFDCA+6t9j?-AC$PIy*eY=U?RYMln(BsH=UHq|EQYA zaqbSjtSu{=BN=rjI-G)2MONQIR;^`X7sUa_oV=W)Jl?}qp;$#PDh+Zt;{~ZgKCt~G z*!^r%TzSsukI!#F>SLpjZXIjp%IDe)Lfhj+`8FH>U7O`Y!bD z>7Acx-y(_`sYwFHp2_Ek^f#B-vQ*UK@{%9b6`vE%yj@$hJ!fYL?4 zO~&Ldc`s7gR~kkQqsIlqJn1yAX3EvPda ztBtEVzZ0BNi1NLlGXFv>P{=aM2r_Lq4_kQ?x{KgxZv{|hq4Nn%nWRtqvA?$sl_**q zaes>j_@BbN9lL?b5G!Ckx7UOIg{re6Ddlg)`wkpyhv+nHzH^NEio9Wz^5 zq^POd7}v5D4cyQIiXh%f|b%6xVnq?kr&z+OnNQjk)PCE zeYS+`!F4!U`^r$n3+|0_f+YSd{|ovMbzj?&2{Z`GQ3W3&$kaH^%g1d4wVsj4&qT3lU0ID)#)jn(B+OGkK@h zlB5wQ0djys`$2!uxwH-g4;lhz34*4=-)D5&I*^rTy=NDZWk0aQO^PS75@h;7*^b zp4@_BVqD8B&|RV0?prUut)BFLbYMH{>LXXK0ST(?2r3z<_i9Q0LlQ;4NU+^)pumr! z?2DhmonL5xa^`$0yI)tn0Z3WI%cy(iugcxx!UGDk7>N{O&lB(`W9FL%P}<{qNh0N& z+Pg6y_DTeC)8M6=3KQYsC%+A4g^k{wKn{fo(IzqK-?;3Gi$3=0G@B_k4t9QQ>d!S0 zSO2^YbpKZ*wp*RaQy5wcs;SdYyl+S|sK^phZlf>KZIwm3KT^*f1iTu$dV9}TVtZP* ztrPC-6@DKgYAg=rUH}7yA(#7unQxUD3R28fgm6M*>3w!lDeMm_biccfqyI1#oRcOb zrg7A{sr%R$LLdR_v1B(%7=DD}YJ?Y|Z&cbpkbJozOMuoB7?FgpLGkjJd2~E3bf9_% z;hFB`a?VUSiTQ>N>aG52hnB?W(mwuRAMJHs1}DvBe-5ToucBhg9=~7N2C~UjkVOvf z8?*RlifJ=3|7=2<#ZJ|A%cr9r7wRWVrXO9x%gA`2;$s;87Df1efbxga&BmByU1 z;nJT-@HZAMEmLF6b0cI6&=9tigh^sQeI%Hx4(Oa@`z=a}@jwuyNWGiP1f|DO`9u?m z@F=Nqk#F$@=ANNTgA;!w_PYeoQMLUo@^>_5K=Sw(r;ErTjS5v^LvE5Ndj4;W6uda` z3gsh zJEYKDALnyXl&*x0S`JVnW+Fg4b=3J1tpDj_axTm5Sx)?&nANyv5n`NH6?9O(vhi6#8lA@) zTHH8u1m+B#IQ80(bWexRL6%cRs$YmED7`bn4+MA#hiSx0&uv-J;`^*qe#KK-Hw#gz zUaj@`QJ?>SPEkszPt|p5$7jF~?hSo9WsF(4oXF+a|F!*6wAc&bZ~r+d#J844zQ#-d zZH)pZbL50RnO+Uy;qsaX->_tlR+TCBYk26>zK-7}crvp@{~xyV9wDm18QVBg9?Lnwf~AD5Sk~p_ zVM3?4KRW9UE5u+J{;O;d1MmVR@QQfprc5O@sr3QR%I0&SCg0huhr?5AwHX1l+7$mi z?7uHM5N2HCZ&sj|t4_3Tr(%~Vz4>vp)N%0o7mv-rZsLDeup!w4zsycKy)Rxhg6*Bm z;>PPNs>xSytp}vTgw&8AY6@NW%0r@Ce;In^K)u1NU7zq8lQ21KQZ{NSz5etYsk2wm z-7C=R47?9q7>hTOYInll=acqF-o$p^^cP}RUgi`BXwIlPI z&wRhsTO6WEy>AdNKkfu0#;jjjDA5A&o#n{y)0FOLz<_Yy0TD*_~c-%QcKG?H$kqMrY7J*q5ET*HT(wMJ>NLL4Yy z{1RgeXDRgZn3AIEC&8FNxx~r(AA=VnxRAkvXJ<`zGU3-p7$TxdTi!@0@$WDwQvJ`O?nDDy!;Ul#9&lw(=;loqcQ73(!a3EYI z<(RghAZ?IGVH|l;MSmFg7K*Wqp8`7r?-+{4=AzH5iy%S&40%UAi98&773D%ECp*u* zlwS|8U*}sb6=2%+QFOZw%V``x${L@68}03kmC~XU2+gfz7IEoAOL(K1=;8(o3vQ2Z zzBV{_aKvzxymnZ>;Y}e~4O~MIX7bX?pB9ixdcKvHu}PopId2Aj@zeklK00>gcb6Y= zFb+?68l%RE`U^r~$om?qgP2T06ZK{wp&w=}@ydBIUXKQk4>e?g0&D;gPfD3Z73^LS z6h9%v#=#}gvYvfcZnEEKY^iGzeaA`I(WEou!KFGw@4c+{0S-b2HEEQh^TLH97(bX; znPPyzv55}TVJeUga#K2E*}tvXBA{`eLNQ4@S-#F!?aB%M5nRXd{d%pv?BaQ;qHG=c zE!YP?YkV1s^#&`zYz;jVsOe!#OF!y~CRl!A47aefT{c(OpiB$~QvJ;k|J0s|rSh6i z0s6l`Ey3#Dug%~!=d|`PoFvLx@+z4kg~;}qK+EIqz|Tv}YCk``5bXI6KJ4R8X9t{) zIyZE-(AF-0onzWhJvd@XOqR$J7bU2r``hTeVXoGxt;`p0U6)D$ZP2Zc|MX+U7%Lk8 zakbjFc3{X!4GsvjqE#(|%KYB%R?aoYVQF`x)c_-;doC@k(J7P+4o4KjN@F#j2R=ai zk1#qgU8{e|iptS|@UEK=?ZB)zN5Xf~rk*@dH-tkLI?tqy<<+Yc?wBb+Fmw&yG`J~Oho}C4VY_~NL?uS9sOVS7ivCYIcm(+`khHdOh`qGQ zDlK)r|9Vuw2AKJ{KmKR&mSbD*MdMFC9jBGIl^E?c8EksYhxtU@kFD~Db6~glLv4vb zGS^#pA6ZDqBP}&;IZ8tGEO>_FMLNa$R+i_f!&UuIj8}7 z_n(uV=a`R%cVN2+BeMy$qs5AGDipBU{nuG|ANzkUoCOc-*o8*oE;(V@tQQ-qCac5R znCsX?*|2mgl#Up8XWO!d)xka`@~4o!NS{$a-?w&B&qzJSl=5z?Ie4Eeu4Hd-C2!R| z?(+jUoCh21Z?#{X67m%Cm`wqdi1g`A5X_o5iorDrLTmJh_ zmdF8swez=7yUXqAt4+Ji>fO47)pFu#-Dmuj4(` z`|nBe#l!FVcCEYLzh%A-JoN8tFJnIT&Lm7AM-sWYrqpcb4-dfPbgY*TPiFpC8iocd zi3_%#$ZuA1#HjSq!(0Tx{yXwHW4l9H2*zvSPbh!e&*x7AjU61)H=v$BM+_&9j#`l1 z-glC~mNJh0#ZUiDA_vDOx`-|>(zl=EfI*h`E0LM*@eVJX(AUzkjl|QZc#K)7m`6lh z0{(NZ9>}Ai5;hQr@CY4#?{&J_?srGT|Ek0_Z1#Fq@7tU1!F@nWNv!SeBhZ-dsrd*! zbov3`?Oj{I8n&@8#!0fM=5c0CSIfKr)?ZOVKtNqC zs_@j|I3NG2jJ{L%K74UB5z!C(kEZ*IGwhvLfV04?gBP5s_a-Otp0y+}qeg|=xCocK znF*IjU|t6^K2*&g;tMNZKe_`S8-151@4Ys_fhF_!C#XEadK9Ub4!4v zxeIs%k2C)ML`uXc;~3c+>92p-qh=BH2@V`)Xh)7V4$O)Pg9&^tm=bD}iNYu-lv(bM zbM$OC+k-}2^se;ok-Q!Ko*x>2ENjW0bF{qD2fwqxfuf#wzlilbiRsg$R0VX31tg(| zBIHk5bCd9qYMN)gKenzBoSz!gP4P9se>7w!(Z@hePb(;=NtucCq`}D_&S0X!Q=uV= z{Gw|?julEXEL*hyG0_t5x?j48N{cZU?*K@X`5irEdrKY7Gvi?}i0171dQoZ^ER84% zcoXygBkL`r+KRTeQKVSWA_a;&g(Af@p=j~qTHM_=c=6&^T#CE9Q{17rLxAECG!WqC zocF!s`^LS$l0O+^XYaN4n)8wQSn?#WSa9x59E9A}diG^hf+b5^NuDwqg`~aDZcH`^ zI+p@#BQ7C2zn5=|Pd+-0TAXl@Q*P<+x9ysq+KQt{d<;151A|Rjt8hdq7b8_W)xJ7| z3LfnPLT`!jE?jW8W7xu(`M6IN>jINu4DbUN<)v`_0AtPz;Ntbm$LXN zV|)$S)I7^{k-9oaR7Av#=JhEGc47N2YFeX)^-8aJ+46=`XN3RV22$vem`X3941j@F z-D!eb$;MioOKfVwTy*R*Yu&>ADeF)H;GZ4}yUEdHJa^@79!{R^^U*Q2Qk^&ho4U+sDujHy*7*y%P9Ep+fo&dtR1ab@hC)IXB@Q5xl_|X^D4io}kuR)5X2Z z#vrd>@o&7q38yv7&->+@*^!k?W3+``4>d|xr9RiZz~^$j=-xT){O$_*X)4`Cg}P+Q zDmoAQr!p{#PaaHnai|cZP>sEy^GGju@oJMsjtaXAJ!2j{<+_22exvV2m$=qrT)?Xq)=a!=eotoOt{y(|W{v?>Z(!SkEr}fS3p$!pY0|yMp#{sGQZf3{E z>O(=8@Io`*k*4Qzszu&uoMW9My7AG3a3Z0+Mcuf15W&EO+F>-!08+*3-2z+0FOde6 zCw*0wg~@VowfV?Q_T?HOexFw6%x#ujJ;6%39`oNd($luirS4X%9?4U}gl@@#;c4{& zI=XNF&p*XXLr4tdXqQ$_UVgc!yJz?fkbD{DRm34o>u77+$=4&;Q!9X!?)Br$isS5s z+r}G8Q&S)}CJ1_91ekN@+`UekJD`$h7^I((*W7dr4Z>_0b8is+8r zMKheM9mF{suD>YHAs_?lUIEBVq8wtO#A7T83%{83j;gT7g25I*lDWdZPjjueZ9fN|DYrPFG%t~H~c?GBK*Gp2Ni+8YW@ql z{0H**-wjUmKl>bxYy1~j`QM-Z|3Bd3-fOk6ymYHVI=$@EX4`g9PFqnG{UW>s2?6mX z$#H#TOtSFagulPSVTbWi0D`yDZ+0VkOOi&h!(zkdLFkqa(k-tIywx~KTI6<9j>Hm_*0KeS8{mpuduR4s%{bO zuz`WZ?G+Acn)gIgKbTlpFRJSF>^-e7ea!dKqhCjdMV@g6t7|jp+VHS*oxcMEuLdk%0mOJFOhvyV`D=ai{dY-Z*#Tn z9FKL)A80o<_Z8K<`VZo#QP$&hpDcAG#C$$ehidb;-!5g-*zeV?AxMXu3Uld)ab-X9%cC+}^Pq62`IU=OWt*`)V8#R+NUDdOx?-1$sqI zEBNa67C8UZm@LXGgxz|KJnbj%;`f%2xQ4Ymt`y?xk0cGY9{3PZ3(gCmlIE5+`AU-7majfl&q&Cs{oOXQonXmtD4 zXcI4<%KQRa3NYb=t~R}Y5nzjD3rZ`x49Io#_kSsazpl8s&#n}d6n?_PPq47ta&GSJ zDWEHV$g^&UgtVn(;S>)2neD|7L!p?=3(rQJDO5kY2jv#w4UDhnG0v6*grAE%=JU&n z$C`@@>)ip5t!3w<$rndX!Y@#_h@Cya`iy(H?RR`LsM)uAfxn8VgHjmszi8+~IjJ(p zs?#0?DZ)~}2k9KS^6b!Q#17kjH0bxUDSrLJ@OXoT)6CB+njUSmd_B5<&In5bxe5XR z^B44|6d6se@i#aga#j3F?1S4Z3l%sSGewH(uezNfAh+VOZq}?Xhk+N0UAA=#h>a!{l>x0J@*#T(M@l04ii++n zh~pXuQ?0}>cjkD)g^SA;cYkS_p_wtDiKv26fehu@W_qnOs(c*p>RF5_={`3Gz*t$h zwRGy}t7eJ+naO9adDo54iGN0!oeNBrg! zCKE11qceR2Aad#Kc@@eVQI%_4okBv;xGPWMyUO=?M{>WeW_or@E0W4{S-HVX`A;2C^3%nr~89>Io!fJ1y;$449D;LYn8rU>4YNptE?iPL%G+o^nu;|H}IbJ<2wi$vVXXNZq>&e`2 zBPrp~)K%|nc3|BL+(7(h>4@oy)KVw1j%g3ZeUxEhv{=+>B0qJgGhOycgNRFhcmf%IBUS~!)l0%($Sa*=wTl~w*w}_@}d+($}Q+FD) zb+Wd;cYbw*Py(0d3uW-HY12cH*U$GBTWl3?Qypu#*_;^OkFIA3`M%d8=)d?zuH@^u&=n@e%Kc#_6I%p0}Xp_ zIQVN8IYv^Z7h3e6=VDg7RLwgyT`i5}Bwrv&QEQg=hhz4Z-Tv2*rPsqHL-Gs1AB7+k z2-FTgeQO-mqIxo2%1l&@ob-e zJ`j9cc#hPt^RIUK$r%+o{;RJarBWmeZ!M3IJQJD1o>Ct_<>AyO`Uh+Ti}3jwtA5{A z)iuvoP3Z^u7h47O%6yeb@sD@sE+4Y-vc*lu=NPMR=p|qL0zQSX$SNbkRxd)i#1uS( z9SK;i^??mMSWDRR#u(Qvn)8>j+%yreH9zjJi5AB8F~6~3vKDXsbGNNb23YjVg4XE4 z35LMLQKIdve)V<$CNX_XHN82`Xq>{xhPsOI7&DWC6R+w0DG^aq^v^_(;5;Hn2#-0^ z?XDXAr$7`2yKV;ns!}wdQL9lo>&xP?wn8&ViD#sj(Cu*Dudzf%wd?KF4$=$+XE#c!dR zc$+;ZXC&#qH#i8;Nlp6b=@!90+U@@RvYnEkm$>TOx($bD(naL>SJNM`1Vk_K!JlZD z_XKJi_l)gp(&s@ThEs}%O-QX9)v?Bohp(NQ=C)QCbYP%e(^_}iI-lreX~~eq>r+7E z`Z?7J%E)298OM9Oze@>nWg}X7>d~P7-sy^N*1l3nfXo*T{Gy}bn3J7rrg+lDy>lnl(O$HnK4BE9>d@3{X@PEHcggBl-z1`m;?v3Z)6 zabV9(T_VyPNBq!<0CW7cE1;1%cPDwy+=&>oL{sv_r-rtfOP@yHV<(EedlUX zj(V)5hykVLEt;7f%Gf^|PpQEwBGm4`W$|S1aPEH~Hfiw07W8lu)E?9|^7LGJmtUzk z%1}Z-k=rou6GYv^)JLl~B~no;qXMaX2fdh63=q#W1w?o3jKR1ie@842sg|_V*S{O@ zw|xdOh2+F-23HwHqf)xw&=<;N^wK)YjSLF0oIU4^^7%@|aZE{x=BX*0l2&}-}q_NGEp7l%@ZTxFEBgnie1pTv%| z4Uk82zlaG*;NO3ZzW$Iw%GmbT}8yBo?l+AU!Qh{ zMeCn(s0GjWH|||R37_IUu!|EDz=A94J5dqiXCahs?N-xG|!2tVFI5{9&UP3nM@ zt|95|u3@|0GEU#6Up~moblV;r6*z99jq6kYOk)IjIhTLuIlO0lGrJ48IIkgAp+HC! zO-9de4iKr`4bbPH1$Ln(T;LQjXmv$=+BXGvSRC+9ny+}_*&a#BAQmOr`FInuF6TZX z&-(>F-fO;#$W~3JTS|gwce7N&vB_)O0ZnN_sgC#}{f?#i%ul5``2?D2E=)qe9 zycL6F-!zBG^IU3c#Y7{4)smXXImr=)7wgi!OaYgHpN8f{!~l6N;dVcl5**UL=Vg;> z4m9AYpKATAp-0I;oH@#_`{jp5|;j9HCM(2OaxLR+}0^}Hw*q4=( ztj9CznQ^s}Da@bdN9E_0sZZ7*tK(CAr)3KSb-jH1A#I?3%7OKlT=09zx6_(iIxyW2 zt%>OmYY??-Pdlv(1Zx11lSv9dh5ZZoWGSQxr8KJs*GlA?0Qt2Np3KND_A;d3a0aob z-=AJ@vuyd^wz%hxEmDo5`jS%T{|>6_E1PeRh5u{e?w1H;L5?UmI~Wy8h|-}M%ml64 z6_u$%%bqR}pOwa=?LH0dbruT!7gx#mO+U8$ce%f=D!d)+H>MmPUaeXdxjPSow0GwE zKJeY#iKDs`K@NQ@SXkHM3)#V{n0Q^c?mXK>A)rRL%jy$Asr&%m0QU*_AlOQV;h4Jv z$sR5H`a##p5k4UD-=}RKiPzx32&x=k+BL|48Xk1>wsMnE)Zb4tSvaNH-tFu=1`mZ) zo)6R@VqhefId56UXy|t0J`WMh2{{3g(FV5tQ!m=s6rx0WRTv$Sd61Fw7cpgy$2Bu2 zg|ZCnhxOooa}{L6Lq2iU&(KgzgyM>kKEsV0i&UVhv7p36J9%LT5upz_`~#I%cUp8e4tDY z%+4ieGD)w6@(1kt@Nhkwg4j;0Mv;DkI^Y8xFhi!>6LLkg#!s}I8gOIWp-dLVWN9LS zu9&fOzCLgDWL~CadYRgq$$$+mM2hAg7i>^dl9lh~A=?e{ z%E@NEp@;KKYA;^2l$adTiZ`ZA9G#IB?oNC;>)PpLl1h4B62#5>$fQ0#qBJjM#+=k$ zDKmb$gneZ(AExxjTu+UDt7-$4ZLMwB$JmCYdi;`aUvg zEfGXscK%BYQzuNh{T`ja;LXp4_xC=8K4q|!&|+*0`Iw?7$gT>KX*|92W$V~FEuvj%U*npJ-#)pUEYL`~U1tA^+L!~rvZ z(>I0-xP_OS_Hb=@^Jx7a&`rztAiT4FO@zIwD``Yws!HK@1Z_u21R#HYVUxf&&U>T8 z^+zuqGGP8E1S31%1|3@8LZP}XKO&PPe3vOPYZq*$-HWDX>l8vYyFl}Y>{EdJ(?3d+ zlK%Mh>*CEa4A@2r>fV^6SGX_vC3kIm_d3lAB;OoJ<2aX;5n}Ko+uJgD)0(kFT8i;F zb0g{}P>g0snNa%Uw`zvGV9Us)5Pq-V>LKtPh^bspdf?!U&I;7+wv=>Qf zds`+Z9(KUWd|~UyW5M+7qxcxiC>$fhK?dbqFL#qN3LX8!nDt#RvtsKT$IFp_cz$mJ zw*-DAPbsrw2XAuF3w&|yDkLu=x@meJ0~_V>3w(>mxN+Y&GOY^2vYzjzrt7(b*N8F7 zkNx9x*Ez!#GpQE|qIaUVQx)|EFP`7y`V$qu2fQsy$k`hIu!x+B{yN9X zj=8-3o61o1x_eEL*3fobi@HZT8FInnXa96SmB^MwPjx}QLGfD= z#A&-fIkG3T@lbDgy;?}p5>Dia%yrwJDGM(lve%|uAexOHdiQ1Kiu`XSc?_jmMd$YC zJE#Iz&Q}Neq>q|J*ICoGd6=I{B1(_N*7A(aUfdXyRJv1^V+~sV*iCbXWm41CUFQMQ z8@c#|afL8&SjC4MRJQ`%a^=hg8WrQF!*^wCS`jy?CaaS2y^LIsu%=m&2>Ql$(7z(! zy)iH3xTItDlb|e8BU6y}pEa`oRFdBMtu`YSLvwpxA$-%+c=9x+!%SsKc?FW zn_oYROp0!HGIhr5*fy+X=X_fPcOzHj)%2Khmc-M9vfa!ZsRj1=fs4M0eD}0r0alkj zG}c3|xewd@C~vz#e4oi;6^0Wn_}3dwwqYyD2QZV9&ty*g>-SsbJpg|0=5CR8LK2J# zz(ZV3T#tWAlNDI4e`RRu42G6@<6YEvYBnw~sh4Q-G(Bg))P|M(`qx7E-Rye9j-x;3 zhsVo1{TJ}WjX~xauGVnb?F{9|TTE`qq~5X63aR?xkG>B2e>Yp}rZz;ZNe1t}{GB~` zc&8ho78EzB9_1gfH5l0O@^YdPn-f{4GwpyOwu5zz^RyJXfl+9|2%HfeO9HsoIE>Mhr;~^DlkCK zs$-gZl2sYCt0f5>^?4Iy^KHg3<7*2-j0mY8hX8+Vqd@&j*UvhtbGE9N$2i=z;T#+V zMNb2}>Uuvv*!nlet5H{8=ie@MN#+P?=1dhmg3TB1STD8>vgI-cshn@XSah^su(Y20 zHCBP%kURW$Evo6dbNA|q34qWVv7xv?*h zT+YiWnG8o1T{fI2*r-ASq$1{km8Ekll4-Bh$i;UkoDI~&! z`eK4z{dIU1x@hIHf2uRhDzg_=s&QDkF3Qzd(!929+)#PwQatybt|-#a6ckU)$akCk zG8qss@}0`!Z!CAAv$Ci4{&@srw0KNsJ@$#2e={QuDEV#5+??A^P&4&lmHLH460%;U z_?`q>QXpWTd{__xI@M_W+tflh&6%2cruR6uwohU5NA7+wF|q6XNBpHgq2bEQH&Hv|h5wL71qr#_MNiLP zDyw+MP~~;=KD}$c0u#g4lsbb6=NN^_R6XvOmI#iA>&yeHASX0Q@aBQc)O38;s{>y9 z-JkCz1|K(kCucWRpNX9=_eJ>y)fa4*FfOOlJpAwS#)GC?QnLR#2z@}D>#_Hg7}&xK zz-24F%yNp1@feM%7i4$ZA90+4c2tzJ)aKYWd2p7{54+42)A2XJ~`3->)0G@|@hSP?8_ z^8=(enj`94EB2)6jVAqIHpzZD{Y0apjPvq%QjWOqsD_tP5Qeaz=3*uLXuFo6WvvPr za!t=Py*Pi0EL0&$y86VMF_>V901D5AgS|B1eET*ue>q`(y^y7Po^CgHDSu}yfe=WhWw&~)Dbsv*4Hq%Lhdk$mXLcFW(GwZ>A zg^NOc`}S;2c&8uIdS8G{REcE3R{w6c9iavQ|$w6+oH2^d! zRu>1~(SsbaDu^C5D1a^%vp5dc!ex$TB~&O2Z4rW-`LELVDTp0BIX)D_+joQVImuF* zn9$1PkJbMdkpc8ltZQDW1omhpqgG?7SmRIl^+6W@dnkk^vM<~$kH7*pPWY?Zbtn^KP$Z}Vb%`O5 z6W5=lLA$q&oOoA6$9QVJ^(fo1U%T?4i`Kc#<+bYoT~r|}{VCH=a|8&wA-i8Jf~B`B z$DP|Qqk@UCv7FiG%I|)K>7VhJ4d`M4|6j+r2YQmf04>7WU@(E5cjtrml~(KtYV!%yPOuQQL*qfblZO`DRSn~ z!OB3XfU~exv0B2V<2q@sIEcbx_L3Ja&d)uy>h#=3`=o;ajT|L=0(9+e#fy<0L2oXd zhqH)ZU7Ih43~{M8ZV{OcH&0#bNEX85a!&1PDju*Xf%>!QaOhj4&6hG8 zdE zX&kz}KO^YwcX*O3rGwbI@Ns zE`+3g7~jg1gO>UuO}BmW$Vu}Q^ra91kBEpWTGwyL zHIM!^NjZb*Q>E_6G~1FkXFMx1y(jz)zM

|UbW+|DN)|AGOt+|o`K}^Dga%rSPp=VdQ)i6pC?CbOs6}jjNf6&L1i^}EOzCrUF zzfFv8s^`XhbB}Y`iw*7$9K$cemJT_AmoJTFgL~ZpNP)0FF>mT8?+p;61NSCFlwq!M zEI`rriq4P5+PLue8FXllrkD6e?J^o8SVxATU5FHs>$x6{8YrTBoe6xciE~(QzZ?vI zz3`P`UoZ7J$$o{EpY_olYJ9x!)F0`Es3PeIl4fUpishgcw1aEhr1!9lM-T8X(O)RB zs~AaA1-y9)qa6KEm-ybUnQwn_&^zH_SD>YgktP|Ba-_+fIUXl*`S6{qpeaT{=U88pT1v}_0al}AtlFjkA(CIgqz<(m2n1qiOvrsG)0e&CpOA-m zgs{C|&1`6DAKYp^1^WAcJ)RfK9d7?I;pCiM!+JT!F{g%bn^5-1<^~v-Q}JWFA`TRO z;f##_?Z{G#9*LP5vX|w7+`b@s!;X4TEY0-3AVUYeol5|1m^kDmGG{F>Y?dgZ*UPDX z(LhDTGvM!;hcX)6=!7Z9+7S%73B(mJzVT<90CAIi4J6=0l3J0g>-KS}`w>4#XKG(;$%!bdoSJ1a#+r?RV@pKhijG*v_~P?8xMAO>^xKtEG?=SWQ~W% zy)@loh;;7=UG>f0XZn=Bg%TvLZRp;UUbWN#8r?`xPc8Eyd6e4$0;+jA_ZN2)9^!+& ziY;JrypxrC#6`3~7jRV%x%bK5DzoIv{uT^+I+kJiusZwdzgbuRPpIh?sN5*(Wbh;@ z-pyi5o(_m5R_jX~HI7to7D%j4Azy?`W-w`i1Ve%w^EZG$`8av`0V-oP1m}TsoAj91 z<6i{*x#$`H%A(0oH(T~=)7nvDMVuA9Y1IXro(2E#{+Qc^3S~B=ia*$)rHf81HuP-2 zV$49PHNi{BW$Z#yi^iLNp+{KIrc_Tf0S3=KP7S_km(De;3LimZGyAQkLBg_Cgfw)-07;LhAXjcZPgO z$VOEmH7ci;KBO=+bT*&2;7lzGvHckM<;jIrOs=wg6S?)$Ee6v*Jm7VV=@ZjID**(oY?z)rzKLRQEGm{0!p(cU*eogN? zweNP8B8z3wk?6nDe`IW9(ua9{o)&!>{pX@;rzKP^-hGNA-5L-#ld#1zG_T22i+qa? zwW28~$3~wKq*-KJp<^VbLlOrx2n7*6v!e)76v#J3?JE9+mt8A$FW~-eyAZ~ zeqi#)=Chm*_;cWr6>!O?gtEoW*U~p1KkfK%IOLmk#ugKECjwES-564lj+RCgzcQel z$SaJ0101W(=c8X7|EYi?6Z8;${9~lXj@;B7JRs8Sz1D`zI+w57C0?XHP1jSm%g1$n zNDn5!jSRL_7-5SI$qKq(WX3zx+F;w(3sj-j4;9M6-XM5VfKPTiY`ES?Nue-^eZ&1B zo^dIWrH2g#x?Az3Qoi(%Rf|mslNSYYt9tSlE`IIq`BO9Ua(S%a120;;7Gyj%wgTqd zKw47Kzc7gNAJqg#-N0IRjBgSm-arP<(9dW; zXpz=^r%_0OI8RPKCq+kJ1E^RK&r)qe&w#k!>)_^0$l7dJT}d=%YdN&7W@^16Xsa)aTrS?&9v{{v7Uv0 zhOn-QR!X8X@>GlYt5HHd7$ENs7?uR_p`A$36gE>*Bq(+lfCZ_|Z2A6gOD*;L2aL)( z5h|pSmMx7B8{XIpBxzj*9KQJ*p`I3Hp3K%;smROgLf*{@K#~{*zPEu0Z`{fQRc$N`!YB zlirKZ?k+400FnBUdz77N#NP|OKgseNx)sy&KcjP-a$>OR+Qm^5flvun@J9I^LF3DE z(+;jP5THy^Ft7K5aBt?;vZ*0q=t<7dwctjA($nULUT>Fomyqs8ZsD|OVCtuT5fSc~ zvMBHR(qWHSx)Kj>{yKP7=h}=P?ls^I415{*!Wj;#T&_7)JYFOSt+fB3L_qljYbSPk z!Rht&!UvIJJAd7bL(uGJ+eUzXt-CPzQczX9b5yCte0OHFA>lcMiuTMNsPp8O%mAes z8>4aK?C`+N1ScF(ToPgIiZB30CA+(b(AOW7N4Bc!O*07i^xcW>hG?XNe{3zN8`s=2 zv<8nj4#5S4yBXK`e8x(@{H@Xykato2oI1KrNEwjYK20*=+yg~ca8ju$)ZXdXDzY6( ziVP;g#)i2!cu{5R@SthP$H1<`vzgF7R%Era7YG{zgXIvpVJ0{dva{ z>Tf^!H6^X!l1=_D4qzl`OU!xl6T>fcu6MUL25IyUfAMZOYsd`s73mAOpIiE@czcSB`r-OQ-P>}jhfR0l18l~o zRX6V6(iwLCU>PQuNssaJ^0xtf?5jIz5PeRnIEj?>>ZYht=RyE)?(A3x@K742BLmAo zoJ4~ojubax;z5WqL=T%YC*}<+`Yg*ogbcU-GIuvkipwZDLa1ipK5ui`M z)tNjFx?^g?$PcviPxa9+Th8tDC8vEozTxsSe7PLOr5_eGH#X%yp;0y&I1TgVLz>Dp z=4;lS<~twP!c|L!O#F{Z`g-BE^zy{P=N8L-RP{rYH=;0(5S?6r({lsJcfY9s& z?iitN8MB=94b%2V0syyaxF*xr#-#hJ5Sb~#F6n*#y6u^*;2IIbW;((-Y%)oXMdfO3 zPL{wtvUaf-_BBY_LCzZ_T|Ixhe|PTZyIZCj+E^g+CfcKo(t;b;v|W^C z@P;8pM`y2gW5ZYrzG?0>{az#(b)c~E^PM-}K)rP;esCJH-?$kUlAs_2>fzklDC4Tq z<$>}Z28vdBHZLxisx?cd%s~;I?!|M4eiIQ9z}Cl6Za)rj%}U-{%`Xns=uFR4c`nF3-?tzEK|!Q_`66E z1fjczsrbBYy{LN$XBt<|uC&j<_KTZ8{)cMM=PE)b%rrQSn5!i>t|ZvZbTA#ysE7Lq`c$JO*v?dJ zAu_P>l^oQ%;`F>_)B7FgoY!jx$ivGm8i)n8eDo7n0-DM-xBl}@&Mb;)!jVIz?Lib0 zB_!zRjwr0wt#GCMadQ0}=OnplGJn6X@Md%R!_SaF4=KRUYw#C~&g-iWw!emI#d-sZ zzExwPSe;XR_R4&FJ2vrPrHR0y&M0cEHb4=M=xP6d*bdzbzBfr!Wsjjsy4fv_Rn)1! zFJG!_Wx>BMiX`Bb3q(}L{}boJo}G1hO+}3(h(~~88iY3F%8lr$1}{TOewR_|e^tv& zM)+nJttYuE6mx0mOT15Y>1n|9(Z>b7Tt9v;+JhgK8L}5o zDI)x~w2Do?WaDTG&I&-+W)mHRT7OJ}QCzEy8Aabg9r3NNg#Pd}p~NeDzz5~rb#eB4 z7E>lwearCW8{to2x2quTzI}7H1#J|v;E6?{ClEEh@dm5~D`iks<)lP8^<`ldr*$Yh z(&sLHs{C^_bZ3{d)H;_1~5rg}2&<%>e?* zam~UjAoB2{*U_BmvnT(8Bw6J#14Eauf6wHP>>(qEnkR8EgD59M7XC@E>Xg(|cP680 z0#o>y?NBQ6z+6+;wObruoOMLOFkPlE>Ii=~vvDTsC0ZP;QjSAWPdyz}{bv3_CHwkQ zj=hca_vak4Tb;v|Vjr@ZIH2;C5!tXS*~NHtEU4kJ(M~fJlArhrkEKN%%5nW|FNHy@ zl(DqF55rn{x5oN2vJD)C)9Rg|39KqXD+4lQwrk zdJ^Ynr5~00cs#M0u174z=8KqYGP0&J0>UezDI8E)ua!f%pZ01Goqxg}a7}B13}`P8 z3oF<9|6G9%sO5HfiA0(SpnnC^4g!)lx)EVPbX&~C(dnn&?fx4>>Ff1+1<~G)A>yL^ z<>5K%oEN{@XO2}UUb`n;rq8?WR#JidcX`&m7tbCER3x2iA_DcYV9S`H(B;{Pct_Ti z220%3^(~f*Ui93`6_gk60HSAlUhOD?`H$s_{w5M1f-B9a1A{vrESf32iQt2kP|5=1 zdpgD!5Pm$sZN#WD=jXmFnwt9(ZMIEO&!qp(wHB3EFEGFzyC3Q*1&VU>dwxQF>QQ^x zO6%uGm9p0)KW}JAXi-bB`Ka6y3NoS?x&%=+VrIop28WPOH=simSeokU-o*_TB#f*c zA46305FnW6_W3Lb^^X-c^R%;=`ODLCPqolb2~pkgd)x||dc43DhFBVWY0d&vO{5jW=5TO7s{g(Ax>4P6Y|NQeZZTLY|oJTmX zaa_Hg<=i2Cd%0S+V)oj=nB15wpuZ}R&6&j`2Ec=m(u0RhPiDV**_)dS;$1$yr8Ug6 zgYlA39Y1MwPVJ$Hb^q~I!ZU5RXh7kMRH2Lb7JFhO(ebSiRG@Xl2hfGZ}(9GA1YJBw`tp-doopLPQCJ*{JPn& z>($-YQFwwGF5*;-IS-S2(bcpu@5HACR?n%KhwjKlfQVTY44;up5AUBmf?3*kkuaSd zgn7|hTB$XF0-g6^4cAuF3J!WCgKx*vw&xNBMn(4){PSNQn28hzOA?%>$!hi~1jE(0An z2^XC%S3@(Vmh5{_Y#^ zlnQ!=hC3*hoJHNg$0b2(c1@=`c(=E=YIyZqo$`0{;Tdgd4d?S?V{xo3u}eHZ70GCT zw(+gs;;&EQM~2UR69~Sx1+?Qvt$HE*O-kxIhnvLp9dSHYlg4;`c;!QlwY0bs|C$>S zac==VoqEN7mVMU7(&|RU1N7xJeOwW##m%uW;|554xV5zWfP{&XsgB}2k)cAFA=Z>fOq1A-!|lbrfK-~dm`IA&q4`&0 zi0Lq9xUUvCc0(yQ+WN}}Ygp%YeXOl36a+z!Md`IPE+mS8d5OG_kzQOBhkNRJ;JJEZ z+hu0r4jWgqemx3+a1Jbp)H^B&CGD2iG7)UAkld(~E7$I&wU4Z1lBs~oO@EFZD!>1-(FBPyyfZq%()5Vd-3vW44|N0S@Wjof3VS7>TD^&sl=#mp<|hjYYLJQ zQ@jU{ln3Nt)WQxz3IUKL<%T#1i#9>lLQpev*`P=ye@Uv+c(b{ZYmi=Kr`;XF& z?H$pPI6KY}&dZ(R+U5GX+eKH!R-+>3sLJWQr{nhMWQ~6a`2{XkwOybP6{SBB?BsSJ zO<4Hk-sD$W_RoYkUK>wzI`~8Zv;>E(J7-J0p$f?npdf;&gah!A}R+r}lSQ*UxXL&q#Jw2I%W(NpjO*o(;1t`mu+0nj1q z#&1zR$#Ln)sD5fAC2w?ylS3+zsziQ5WCRJxYXDyrZA!`w^Gm(D??d@>Mbh+~K+d!I zs;9^|i`X$c0o8GvkGoOG#nX|v*&SY2Lk|K*KqmYy3!e=HXx@Rakz(z#hU;+oVp2OpXaAL$zr$mdLa&!_99Od`p7(6!d@86A3yDte;1KD=_^ubIb zy)o%RUGWy@rU)1dH_@?1sQRa~Lv9PD`{#yEz~u$1G2&{-V9T-!G`pzMz#_E5R?mJ*8WK#2oh2$(NFSEI!u zkl;~~yzddA-qp^B3%y)N*qMRRV;9lMdtN^xJLooIrP^E+HU0__|6GGaQvEvD?A(xU zQGi;#BbG0d@wfZaEcO~{2;GnFN82CM7#@`SyI0%F+*H8~33t&41!~+g1mFc2PIwxS zTVEBtk679f+#+_G`2>0Qi$c~<&tF%F=Ir86xmUs8_hK(Zt-pR<{29p|7*PgA7E*oQVIG!{&wlWfiw&WMvneP4;IYy{M7j#r-q3e zT9zIY+V@W1)y$kBRbia_;&BxMfwb!qvy_q*9f)h*v5>-v9vms8uae@k$$jo+g$A4C z5RFH@7?0IYkfyU^*&U>=jecn^ccqg~BbHIIuyS;@_go7CRu|DG5v3UtvSHtBKS6`1 zLrCvM&*&sK>5!nDcEZvC^;0^%7u7HKUBT}a>1?g8rgtzu?qBP0VP{yC_RZ0=j-6#e zKGITwLODw`GS&Xd|5()0ixY2VTuq4^CzY!UM`tOpq0!?6#m{jN-N)<3Ju=KCK~N|@ zZc(RXB=2ZZ8pJZ0nH(irzeUJV+ai{7@d(M#QlM+{AX}+4rujDjtmW} z#E&AN^$6%Ju!6mq|FBG1=--`V#l&W8)#8G~O{=IObY~JcJBYIc9kA7bDR>SCKru&~ zE2Lt7$Np91%jTv+^pRKPAcL6!g<<1gGu$_zFvyUk9>a3>+TR-=;tO4PoCXB zU-*A%2CX)58b0uw_(nA*zozs2$t9HJ>BjM8EeOB;3X?>Gr zs-6=3Xd9jOF{b%*Kzu{eZ#hp%vFeE5WkbnleKmUVy)H#w<0Un&c7u4LJD=%I7yRTU z&HT+iZp#D>@_|Fv@6c!jC}V8Psf30KJp9dVXaoP#96xEI^bg7k1Z!9O+wk(TlLV-=ChMYAI%`` zBDS0)@scZ#EY`6XO!M`q$1TNIXln1syB=uA(JVc%M4N(gvl;vtVro2?Vmubvhhu_JJ^F@cLfe ztmwbh-k6oyhW6i}zv!`Y3>j2HYIU|)=o#&mlD_f_o?3b|0wu7KjFqy9nQc6~>%0N% zhhg{EEYEW7tQhZ3BXag3{?e1o2>`5u zgFvO?g7b6=z(9s~GGcllkCCrf5oiw8di_UkP@t|-Ai*Lg=7)u_sZ;1P#SZzrR^n0V z@U>MfnWstEbI=f3Cl?R_tK}-b-R&~B_m0@|48;tfFZiJ}FGy$7GwiuXq-r}B5ybH` zDc}5MZ1;LL8PRi^qcJP06$;}g4RTEus5AHKty)NCXFF~R)>mKB9ahTsgHGLYTlnr2OH<@AwrKG3S6uJQqnTDmX8v~o95?EkE-?g31QpN0+QXje_W9v{%Q8AILUh6jMz&TH=yJB{T`&z(p6W(fEl|O z%KP%`kb`v;FV0;*xL_EO>onAPkbcdtMKm>6H0i+d<}-I?ic)Ya*5!B7ugbNL6;^5F z6l>+k)q^``Lhp!hIU}VLW#0~nb&Y)far5H?B)KO9eaQ1Bb9;;ax_CpS5WQ&Q$8*oy z+$$3<2_F^3z$$)LO?7#U@GnTs40G0Am6Sg3&Eh?d0;>hyZUpS8I0;wzTqdpXTQ@?; zcsy3P=B0yqn6}&#=zZ09GCN%M0_BXU>F?FAv@F-t*BtAg>b_X67+M$$a!#ta#)z&P zJ);Z$t#Ig;9G9_28c`3`*czhar<_IGs>*0(so(h@25y`5@8?vd?>8y+hWWi=6o zU5UmeaV!Jqw2$>(V}dKRNH`pDb638y7uH!PUh)J!w=jI@zr%xB9(DZzP7qgr$UG(A zRcj)I3BKRRw9d98(x5F=c4mYQyzjmyjB0%P-43dR0epgacCzmRj8*1BP>5$CkG&JN z3hu!LBAwqOff{Q>?crq?lVT$C-hm-Y?8{yg*kkEaKlr7ChxZpX{@#5)FgRSnp6&A9 z;a#~pN~h@F!p7bUvO7#y4frASMbSKtr_%15m^alJ}uGkGdG2E%SvGwawHq&MOq}LK@F#P zM+Nks*p1MH)^&@*I6U zq(GqL@h_*s=9%-kPUGj2A{QF?9F_bLdbW;W=s49Ntw(G3g2>A&3`p0W;XAeCB(Ho# zGL=4fhRLG_ewXyYd9YEu>$>-z6R=vQ@uvzA%18rvJgpPKlG#C6c16=zA!6?qIan{% zb8?J*{_L&k4adb^sD3}?2tp(y<5TW1<=vp_)DcKD(z-je5X?LhX^La~eRw2dCFn62 z${IolaEhcyYStCZicS(lY46>CJ$LJRNND%t*|ZA`D=G#D?!;M#n~62=H|CyK=)_ZO z3#mU0W6a&XiGM=(z5dNU>X&)h5nOb#&06OAY7hj$Ntw8k7S|3$M7Tx#zVOX@pXi~6 z`^kW<&TjuJS>LJ7c`De|U<|b-`p=)%hC*#C5pxWxXI*K1vUiT+NE1iuA45C|QaX{3 zdVFDh8MmqB&6h&}f$tk2SsjW0@i5b{uSm2HhY_lbZP^~WD9Q$7iYa+x;XzyH@+a=v z-|1oDsU6G(*2AmI?ZfM&>s7|^4|^{Z)2Jo?9pB$g>#Zl`IG-NB@3bkx_-o9;^0*LP z`li}-*{Q9BLQ5<6>@7oKtNsjF?X^#Y1UM40RJ~XQaz`dwuBzgIe~{4(x-VJcC^-q95A%L$GLB7 zXYU~Z9v48#S*o=NZagNQok78Q3pQ&?v2$`N?Jbyd>rL@G&!M?sL$ucjpr)by|Jvk2 zBT9`S(b>!g5%0wKqZa|7$OTlI`twy}N8kl>0yW;upO8K#U;RPWS7ZKjyHL@`tDxMF zNSEub&+({7y57 z70bL?@5aGg%4?+RJki0@7(?UE(kOe&I9jj6vf}zP4*o%4a6R&=e?NW*oGZ(YrD6Fc z&vmM%0=-*Q^X(>HGEsY?FVLLZ)>n(1>;Ob=QebC||2{OjfS@u)kv8DLXJ-C}SHY%a zpq&=lYVP>#v+-Grq3jn+sM_S8itAJ;4JG>~AGuN{Q|J8rcN5Ry zILEA;Nzv#p5;*H*&|D1YA+a!&eMrl|V^8{7(S6k9Xar@-NSdyzAx6WnDvD@}DAO%S z+V(Aqzbv%O-+5wxt&`%=M#gV0XHrI-1XEU{@+4nC%~JD}OR-__Zx5;$a(lMTobh-w zRXJJbtF(5=rfmoLp^M{zjrei&#H=Lyql($RxG_YVS7APlhw`o!5w^P8O3V)T#Z8wJ z&lwxAkm>|IXo}~&CCwErky+aUyi&Rz`_YvOPaT*elF?H79rC;GPeLvLKFBA3g-`9* zQw}#LAA$dv7s8NOadS_f6AoNH=nPHLDygy_q#Q(TvL?tAWAF`MGA60E{KQcQ<>Zyk z&Ujc_s$R(jtZM1%vN;@D^FFh|-fM_6=yXLTN%kMS8WBL;-Yp`jC({wlwy~y_k*O-b z{$pi3G%r)iB|V7UkyZnH#l>a}b_Z(_+Q}KN@yD4nniU^Zc3Gu$j;_Xj)m*&64gU%jF=u}BVsc(uJp-kXd}D%!uBE8_oar_U=BGBx?~IMuVv zFBm%QGyd)PPMdSq5Sg6m{O4~bWLC=U$iynIb3~hkjols>Z#?jy=MT4X>ED^ocO)gv z1q+964GA`2@?`I>q9m!GJewA>_}On@8iLyZj|Yw&N4R;`H_hCL$xLL%WvV!`OPG_L z2S}4`M{6Q+c4X!g9RSw$F%|HhP~%SBNBOZiBO2=f`nf9w%VejdHs<&y+)U!Yla@t; zJ{OpJonST(5D4fdLWLe$MUuBP$vl9$%9u{H0&42>+W>}4O8){2$_U<^h{b&w7@1q< z8~W_3NWYMJ&%B{{u;Q?&F&Ig+_2%g7&SJ#=5b=L4@Dd1jw}$1U%gvX%W_}o*4|O13 zKr%hY>Rv+pXezjg2L7@XcvZt6C+4cZzkKz~H>K>c54w{dv)Ui`%mH}i^bZN~Du3G+ zT2TAO%XRMPVyV_0k%{BSfB+EJN%5oCP&l>ME`rgQzVKG)<0WP>CDZU+?1VbLI@&8)dqMWvb=|S8vuR2umS-*9?T4))iAk;kl!?i zbvkXMJuK?C*silt%b1ldyrr32m^%y#K36W-cF(am)IK5#{rIoK!?x)8!D-oxQYbF> z(mK2Vjk??~5fyAr!y#4f3_Q}}sT0-s_g-Kz_(0KsgA&xqfYYq@4Wsda7If{ zU#pH_k1PJca7O6uj*=6MFs+j%CI~jhmisu`z-;-e*wz5Rpd|lQSwDO;o>I+wXP*AW zJ8LBOttoHRY|>wi{r&^V73YJu7&K!S^mRd$yH>n2Rix?Qp@Z^+G;&09y&et76MLb% zYspUH)v!TZ);K*Q9#tCbyufxg!>2TS~t5bcKgs=`dtgkhUmW&d4Zgoo{*UcpglK= z^~aP0ZHNu{j=&hk@;qD6)M>v!GJm>F{#E&{r(wNSuh6oYf#$a-y#tIYjW1|jD}h=u z%NP$mR~_nN3QL86uhGOm1A`#S$dNR}To~o{7-}c6imyIbCeiF)B`F@Y^_WTF+u) z0@OUIIgTBb_raitVkgLq0}N9s*Jnq(F;fSuVM|QJ$*;m@@`67YqPI4Sq1&!B2?2i# z3=2wG4<<06frdy--R+%_hE4E4pD3|O7Z-P5CAmf@`}N0B3;{n~wxNa)o6>Z!Y=QcN zCRnInV02{)v#F0X5|?3u*AZ-|)>!|59LxJj)zIDjkuo~3wyoHo2@=MaKTx5tPwE$q zSb~`c3P$bJ@g}P(i;$R;CzU~yfRpV0$dnlI5pi zbOVBA^oq&$`VIKh2o;isPlpvF-z@tmLA zuQu}u+u6nk;hnBCipTG^|6m?p0=|4%=K^8mLe8)51qk!Q{C@ZL@zXXB7W}5he~{XB z@pq!+-vGg&WCjwY))gd3EzCXHq(&&T;z%L~^&|Cl`GKi7uWa^Z3U<;xgiDNhXEFn@ zGeej*HgT+OUEjVrIMzC;e--aYD;jIRYh|79 zby*jq9^I?ap}&u8CXr!m9Tl**|Mcohc)lNnI@N(rWvF|@KemH#Ptm9ZD@WkhS^=3na1*{K$C+i`Y4X zD6H-ZSd2iLiX22NPhDvEk>yUTNdz2kv*Sqh?R(wM&boD%i>!Rd_1z4}7Hj9hpwpKO&p*{2xJNT5 zCXv8-3{zfm@7W_?4A}RM;iQm9e@Qf`LEud!JZ665R)1B`|O;tK_6=Iu6aan)PD+3{Gg{t#|g^)QLd+8i9auX6=@J8rTa$EwUb2 z&EH}`R@@XSdlI>=m!l(zMcjsVIIVkh)cE=Rktrfr_(gc<8kSjsY6tfe81F^=FfkG# z6e~}{lbx{%5}H9#ajSoJ)%#tUcapaoT}Z)qSIn->ub?8H68)pgA&AVjn4n96yLsms z&DtkWI-zg)Bu{b0mOLfa!hAgIKU};W+IqaVB~w%p@aUXjr2)KK8jxFa$HN0m=CA}m zTQsn$%Jz}2E9b8QV&&t#P+CwWxP66^xWv)CX(Hf# zobd8)8g{iG5bzg5vQy8?XJ?gl?`2-tRd)0Z){)DAtkZ4(gO|ytF!oo|uO2 z(RIPCzi1Aq$~>E!I()h8KEP+WbqynpV=CoB4vC1^4I~SZ1y9_0Sl(W5cJA1wEfu-s3@oH} z5d3czirvqF z63SsoVru5EN;XZkle`-Ngo50o@&UEd$TFQUWve;LM6+<6NZ>-%_n=vh(&a}oz+Uix z5&pJIlge-RTT_NnWVz(2dkzZCL#+#uN@>ie8l`}4^Ca)DB>D`;l746$n0vH)bQkv2x*RV|qjR4$xau2t)3sun6^Q*5u)g`@>uTS8tSv#dEYr*cW45R# z-4pyP)zi*t8RyX8jji7NV>tAIYc~tNrT>q7FgUo50x^JR$-e@g09!1-$bC@!46OBk zStlTRlquwu}9!r0|>hEJD>tvWI92x83 zxeeq?56$e-otJ1&%*-(p6P*j7bPw*|B_Sa*c16mJhW&GD9~O0R?1-~7l~C}Huy)Ut zM0rU2K9dGm0LYFuS@Y5VB>f<6Al-;jY&?cU+A-}qNMbRk(xe5p*?hG(jui&f^06-( z(|xdQQKb_%i^&RfmG%g>mr3B>45NbO59`LdMsR-NX4-qZ?2-7Ws#b#oy|jIKelju1 zu9-+x!(2tGCi$U}Cjt^&5?5_qwqxhHdK}nL4%8(wz86;$a;!6c`NT<(*nF(~DTs;D zt*H#Z7eo9yg2WQHsPrQ1BXHdT6*f2uSN zuy6C-o|x8_ier%T5KkiI2W3I-#C$OfnOO=85y zThR^3!bDX1=l1fiiti&Mi)w@Q_n*IC&HsBqZdd`!$Beeli=vqE3TT947}LM6!c>y7 z5i`bymPbi-5-f}DDoK513)%Atvf1Pbc8*y4xB3g@QM0h1w^vBrxpag#xh9MYK{I|l&qq6S8 zdM|WU@%!*|sF5{5-J`@dZ|Y0n--!I>UHzm&3*!j|y&##sDw(o$W_CxBgrDcZbG)Y~!F=;VJgeeccJ8VIy6Xc+czJZ zDPcnJ{I?NBe}nLJv}9p*BO&JRb7qOH3)>v}w6w=3F&BcPs93y)^X|P#$h&Ng9s~0v9 z?tR1`kps@jjCU||Tm-oJr(}^I>es@Cs3v?flCF)26KV5NOsrPxA>d4#UDTsz$D?x>}!FtBnyz*q2;Fx3Qh-U%nS-Of&&!;IwK@%1OA znLOgJY$4UoS`!>O1!Jh5{vvrCA~2MDlP4MC+bvb->1yQR@P+oeKGPftm*5qJ_)K`A z=d~Db>sFa;#$6L5eHPiwkWttMt!Y%F2^A6PW6!2Y-uJoaIV>*np&|C_;bjWyCVs%XD{$$%~b`|AO5wu{+C8*Dcj+(dcO3WkzbYa*GezrRaC+e%xb|Z{! zeDnq1$f;39!L0`4RMgZu{&~VW=ckpQofMes*gs2zxDwkR>X^VUR+w_dflmv5UyP&$ zE9OwQN_B(-9c4P9-ZpX><*Fr&zsBAbguX;CLOFWrJ9?5(6v1~(Tn-TAP@pUMPhzMr zxnB>;5XHZS&#G@--JlH*g4v}{FG-%h9(Z4>@gZ{hACNfvkH6{}3@I|-JDRDsT|CLa zv*8crXSzKvcT2Wkl0VN^RG4jrEB%YvwE1K!t&~mHY5%#CoK0M%%JgWyws6*7BMw(z zH4ytQlt?A^&qEq&_VD_3$sf6tl#R!S!rDwNN&z<=T5rb+zM+jzAAGAKX0Zz_epV%z zx2QiAa-2q-cZ^hs>$0uw1$N$f@sii=jWK=y`f`3}PuVIo7&0#5{cN0CbTK-B6Vj#q z)BAEOU5N=5dj17RFlbm@*aEcy{Yj_fuY{>N!2rhsHb9Z-lcCK<|Bq7*t zNav9dgVOR*5TENiPC4r8=x7LSVD}@#5Q<6VyrKu`FY$KvK*9jfC+7E6?-H^{%oSoW zVXvIQ1fmN5fF+!9G5dNNzF|7E>&5d=36N@Z#1A>k)}&>@7)jTL)?kp^+*K`OoH-Gv zMC?N7_m zWa>RH@iX}EKe4Q4;x6q(`j9f>2mb~K$xg-QO$Iwu0`A7MIaNt8(_7% zZoR6i26$aq{JhkM!Po4%U|IB^h5`pDQxq?#=T(3(sFuCZh)bo2&7f!F9v?v9bdL7_5 zJ)m&cY_kom$tme7)Pj@S1Er(Q-;{O7D*SCI{9+ZWrSseL5U)mH4f5|k(#caW=0HMt zm+Tc^wxqbCB)W7?1=1rWAC<$F(g|%O`CuOQ4u-tz7S$zUFNU~O*Yk0gX-7b$#r(SQ zwHSKA0!!?~H`;97I|p68lkH}l@@x{&b*-fYg8)tR+7jm_Mfo4BEZ2aeq-qsuT|eI+C2J}YUB zYqNISak^;5g zF{%V*tzFhJA~=>fY+_x0bZ3)c%VXEFHgr?PazYEEDWC z@ZA5wb%e`Nc5+1vvk-R0C*{uWwh3FLs}~g(xo%mVZ~Boyusn?7yt_{A{^KEAt$y=v z*xU_~38|ht7#K$<)0kuec|J2HgAQVLgEB#f294m z9uZw<-g+`(0zUAY;1Qm7ZBF?)3rl>Y9mk;RXnO7}J{ln}&-Zo2`8Yu70q{{(?vanv z0Gi3c7Dv6xqo5s-usxp!_4d5_WE$zDK(+7zO01Xd%w*N}eUo0KeWWdQqFKvp+G9 zN5uDKbgy%mW9zMesC|rdrw?CATpptE3Fus@KJSUfA5dC>n|(U6F0qDDDmspX5uT)p zDOx>AH^`&l?($^6wj)~QX*}gb?O-tNZs#DRH^?0=p+J0jmFhdJ(PTVYs!*Gky6la- z73ZaP8tTEdH%;72_1`)IV-KtV7)53sPDk5kV+;jYukjZM??VY40dHZ3V3?{#E2kZ^wy4Q}h-EAHzb zq91{vzCfgtIXTKPAAxKHZ}HRhqS;oySZh+Z&^8dr!pB=f8998pJTj3>MDobYp7Y^1 z<@1Rgy@UZij4OSpWa+Sdj_z(RB8~ql_XiEsCQ0nHj*IwCXt+w_ViUuasz#bI_ii+r zv}(Io@a-M6|6#f?-?oAy*avmTV- zjWIt{=nr-D9OSJDk{-?>yxUhhlGZI1Z-%5?4!>7W>hD`G#w@uODEe7GI6>`bkDoP^XFv-y7S~$54 zaqtaPVr^G>Yk>n`Y(yk?c`@}hz6zCQE%2#NaId}P-<;q6m+6LQyj#T~Zs)j5J zbi)-O8vES+hAm#^vfEDdRqn$175WrEw=$4TkBp40gWb`RB`0s<{LUX9TH51-Uw*h~ z&rt#4mEh$S%?d2bL(ldI<%E~ zIP`2?rTQ`1I8}u7qsqg&+Y*g7HGWN#DRH{Kl3>GtU}zFnoK0*VnHBd`tz%k_$7tW2 zj$tlg-LK0g_U~EO&if-7*G;#7%HrJaJgYR4xcE2P=eUCNI6wMl#c)b;ChC8LS?fs%Dv`qa5Z&%MU2@KQ^v*rD;sMu+ z3_w2HO_FGpszQn`C>eDzJ}A@^GNA}#+dcWkX^T*`;lAY18*fQ9;hlLrMOOO z^~FV6r;OvRgHrIo)kc8RlU^;RTqfyqpsmlAkIVd6aWv+S@;ig=PH-KXs(cU)6oLkZ zl-6s!XLIB$)L8f+H;HOj`N@#j7|qP8(xLBYTEQd<&===6vZ+tL{wwXk4Hu)W$s1@& zyhC87H1__)-H8$kswuLiWpiAT^zU55%N`-nP!9N`|1bm_^ri& z7$WrPDJkKZK3L~R;=caB(9-Xyl3_-a78HOg;&8T`jZ-kT^*Wq;o5zd@gHD*GKkb+6 za1=cs@C}G6$Rux9;!9%%LP-lOw4}Dr%G#lqXejH8`LA}-j1JRi53m}Kr}G0N*OWUU z&s*W26}Q&9?euF1MnQQp1+A(iDyJzG=coTdZWhDl2l(+VPEl4w_{D38p)jwZQwiOhPEayfW$9 zK-*|v{V~2A=Sw+GG2@m)gj@lHoZPCQd~?mm1K30bMO$xAY!Z=3SZuaEZ(5?nojXkT z$Gc(Nb9sQFYYa)OUTzTOH+1>gCjFk(ssV)oL8sIC*YN#h;>2c5iJxo3B3Nug_iX#i zIOOjpoP|?@s{^AXgCDE9N{lNAkpbd<6VOwoy z=5poR5K3U-fd@w_Duel!X;1C3n%_CHvsaYQzw$Gy5PNNh^Vgpgu?;1G`;r0=7HG^G z|F*ZY)qsEjF?TZS2dxPTNfz8dGm)sjAN^;|?}-`f-hpY1Z!zpo(Tc03#X?muM`8qX z6jnm*@FIT=PP^kzvE%OvO(LpOaEQc?WBMZhPsI3@$s$S+RAm<|3+Uu8jBaPlAXH5` z&NMzPVHLNZt>FyDjD$%Z&%R;lV5|)4A}I?{a56k5`*=$^?Y1v`TT%|kxs5)+_?q6?m0{$SNj#gnM zoDOn{Nyc(c$yj%7636uUP4N&gmg)`Y5%7G25NajXZzaJYsrM%Tu0A8fehffDG~5WJ zo}F2DVi{N>t+5h0M;x~a3!@|AHzv-I753rOf7Ys2m0)&e|M;k48sHYXBDi@6N6(?n z$R{wU_BnDTaKmsqaE~|H5AWuNDP#SSZJ+X=tLuwR0Z$#IdEQ?{=^I;6t1DI)pi6v| z58BfqLaw`;fMC2+JJNiAmptWnGLN*B{p(8DFvk7_%5h7ks!>d-)l!rCvw@Rmm7fsuN2;`BV~HaFonchM%hchYilGR>jl~;$!xqG@ zo1iSdUUri!;|ejko+i8;&5aD{)x2XK`1q-$Y)ByC9Wz9^jj)XoSo|CKTNe$3G6ei} z+h|=qxG=*^k+?;9G-Qa`Mx66~JGvokI(H{M$!ADDr^cWBASJdV7)tDb9MTUw^|85& zj0&A7lz_j+YR(gP;o5y#?YUf9qc&v7qw7Rl~Set3mc81q%29~UfyXF1X~Np zWl|w3#YJ#mrMd}sB7e^I9-woN>bqK^34K**8qUAmj?sl|<6yS1&Zg4xYcpL^Yd)Gg z>l>V>?~DiX=L9uNyA5J(GWjf(PQT|PI{EmF`uO7~R2QLy5orW?@=d!KAQxJN4lKI= z)o$j>Z0UC#7s88teyU;>N7#v@qC(eb(q8S{K@%W7GQl`_FcP)u(YP=@$#fY&kAyDU zZY)4+0oz7UfMNt46Y@{}@YTiLr#5neGs|sCFm}MxC%YzEx{Xk(1VyM6Ha%X&8(W#x z8Vsq>E%MH4Q3XOg#hAC}$Ugl>ve~)8m;!k7hkOIaf|${{IBhV!c(0r5ZH>i{!dpmS z6HU7qSG5e;(XzqyJG8utHRj0d*{2UI{_iojgEm_~PUfzNP2kX%_(7H(@K#?L8*Co? z3yxU+!niqMKj?<^6t#7>3xXgEk?5tE+(xN>SmK3woZ8>(Id>6)!P(#Q)2|$6TY80} z8H^}Z3ECx9M>oZ*!U{j!4VUdzT6F5%RG0T735n#zTipxx- z;&0p&9!h5y)T%e^jU!>3!!=1Jc;7?jweyi#x|0 zh4s=Ivij(%pf$=<$A>>h&JnY-MJCzi7;YQ4HRhWKtO*PC``TLHK=2^6HMp{yh2;qv zHk9dDNkM4*f7}g9FepQ1-Jau*???6)Wj#i$jqEgI)-JE^r6XTdti!!n!q$Yh+*iQ~ zHHW`OKk>lX3H5A33Kn-uH-b>X1cRtBBkJ7K+eP^%n3iwbN$~l>iTWwQlHR-2M*3XI z`^bH(@X-$}F9_9wtd-X8KUKpf06VlYr1KrcSl^4}nabc!t?kxOx)r5aR>%HbeAQp0 z>8{7)W&sCNArYgq{ijE>Bx0^XbXb<=3V>)wbvTG%87eiD9#HBk|MQ&s7TL2Cakog2UM z&%?jrh&wq*eS*cejCx7Vul~Qi zc`GyWPB;|wXX3ZwhfYCv7&*C6;ez+MF+8Ls$YMbCJXp+aM0xhT;b8yR5}Ug=QOh|?aWwwmNkiy! z4K!Li9xB_7A3rgkHDcS|r^E>g5t>K2`%d)}fX_CJSRjt=(As4g!YeMmY8Y5h_^j7R9(&Ii>~JWHGO(%? zHjV)(oUQe9D-C$}t~3DI#ID91UI&HE&YDkcc1%{~LvVtjZ`IHmZs-F^YD;>0!b)>V zFf0(SqW>0s&Y^IyWA^JU!&nSiN(ogqHKkkB^8GcT&rgYh@(pwn9#5MJQs_EoX|adF zR)P-`Wo#D=r|CY{z-x-fH$1nygp~~_>Lco}2lBTiB5+d%cLzAw<@gM69Baj5BS!GWfhA| z{Z)|OOXm=Gkhv%;!brna#spn&>`S`GJJeR0j*x?~+zAP0-3A0|Jyr_21)%|o>SBT< zYSR{*Y1^b+ZvG)JXy1cg(3JYhZ4UfCOx%1>`F{;G+$K&GhVdXomJOgF(mW}b*p==wMEn>6) zszbJ2oCb6G3kH4xi{LH|NEI=C(G%&Gd|~lB;1tEqk?@`fhKNCx%m{YDW0> zJvh*()GBRD*Xm0DY{*Ba1407@98R8U;d*1jR_6rG*`kN%WIHvkS+y>M* zQVV)-9rxqD&jOr##Z3BNen@r3?-hOx{XH5o&gpz{PORaqSiLq)7ZOCLbg$MxOQ9Jx--hKhDV8r^N ziWbfU7F7rh9Tz<(DV2YR1=OR@oyp7EH+`(v&^tS{D=C3|+}S4PMDE7O(mmOL@_yH3 zBC!gS`tnHnhzYIB8$w5^R7_u7S!3MU{zlTHlCVGh_>7sgfC>$KZO_+NuJFOJr`xb$ zfP-zv5tpQ$kW{|DG1}qcTfBCBAM#@2lDUif=W3g!#oGre5Kvg`EA8N(4`5Jr;i7up zHIuuZ_bbs-2|YYcx>MUku2r#<^QTTdM4kU+VI3fLn9xO>z}1r^wBl|!38>q{+96z{ zm77Gt886p^eM_yZc=YNum9j9}yQspTkyk0!9;rh1O5L%2w48LGu~w!=5O#wMb{8}; z7y9msvVXrXovwBo+-OfFnlNG{!U)sa-?{^4X}(*HT?t;Y{uU_Q*Da?af68$Ck@xa% z&`0ctc5&?ov;HiL09V&uz8B#Yy+qeNSErD9F^TBebcc@_h@_q^2g(w@aXV2BK2A!v zkKpm*X~Adc8kSyAd&LQJD}e(C$WL#{)Pjk!j5J#4?`p-S8>U#>K){GV??tduBMFz02#erI(891-u^mmW1@?5x^Zn zaTbjpCmp=O@SAX~XS(MHL;fr^Xq8)Dw8$iO;4?@)H#X&5cuX|L?yH%$Cj?y*4Wu+j ze|%^^Npf~Nwr(R9OG%5-aC*UOJ1;}~gE{0M)1qKXN(g+g^r-r-crl9gs@8jUVdfki zx?q5TE%*v4s{3V-RgcP<>6d74IDX6T(cjD}^IMhI85&&tquVTm2vf<5Q;HBP$inTI zZU~hnGsXL1s&ql(f){Y};r+A2w~_iC%UaQ;kImI{)gSQ+el3+T5jfAsTo=xu1n=>P z+F1b=3w4S`Ed;)6NY!GXXj!_P@i5@pxRWZ}YB}qDKWI?R8L(t^#;tw~o$Qh**w9F> zqC1q)m?JzH1o>%5P56@_ISLECMnJ+C@9fU- ze?xD6{n{R`|NA!QS2!L>?~LhGu7^Lk^v~QnSY@Jy*3^udM>Ons72&77*ib&>JwdMI zQ5O%@WMqB1E)u5T&LRzusQek!ij&KUE_N>Mt{@^>myX`szSk{(c3hEld~*ZePEFMV z0n2m7iCXX!tKR$@v2z__zVNSG$(xGyz$q7CTARdl8L~*vt1;|y5YsS6YZrO1{PyTd zXx1wZ6*gz`w7DC+5-y^c+2BHHtRqGbXyB8ETWRo|wM zW5ViY^w?#P4)>>St{*}08>HOB;*NiNm9L#>C%DA}#glL_4$Et6{|{Sl8P!(Qu507& z4g~_GSn*OEf)*`SiaV52+=_?b6qn+~rC8Ad#ogWAA-D$(1UPx$efBrbkMD0r#>h&t zva;qqulsrwW#kZcS&?-!{J=ms4bu8aD3c9{> zAdFR4p?@6$H@>8Nq%pUT_S09Vo<7L$mxA&BRpd_={ZGGK+EHh`E)FZ_6wY9yn`7^`Z z7P+pT_YuN>ZC=kH{`~;%-22c|2GgAFr&^=NfxJRAhkCvlVYY!`)*LrU zIinxT7Lg!!VM5acy?@@=U@43fjugBp6T_3=`#fJTet77K3)8ZZM~jqeP6j=%{|nD* zb9o~ulpN%G54e~SB<$L}o96&@mt$dH*aHJ&*)tiT>}(}L&l zn18TpI@3n0i%YGI8W;a%9di*{fRkW49vLL~y}86VX2U_}ln^3L$fHv{vSSR{w*N*h z#q|R!$zJD1_Mfz*h6l<>NgkW8I@ zyUUP};&~!+m4^r_$$22{zfJY#tFM&yeD@>O5GDpXA*q+69>ZK%q4~gtPur{~GD!yP z4eX1iNpP2%2kSzBWF7{}p_A!c5Lc8w8(?HymbzO#+KWcVPB*1$%{zru;bVQPEm%>T zFZZ>QMJpvE0Q(7#iZV$Nc%b-Z5a9eL@gNtg#q+0{Ne)@iL6f0cQ4X=!h5YgvJYMbF z^%)|E1WGxX$Vx=?Wq`Bak>YuZH-;2kuo$=UD@`4hEXYbfoB2)YN0llp)|1ZinZrU%9C623iOt7`Oo8E-T6^xX%kWL0a}#tXR`VMlRwTPNveMOzQUHI5?jl_bopYPKh| zvjd2eY3&QQR=zT^ax{7U7OnilCL3b%>Djow#+4h-hu7n%;>Ql?J&yyK1ew7+=Th$5 zP+}?L`kX>nwX*5Wky@FS&+UtKUz`=SuT{6;@wO7PszcmUVIbw+eHrojYICgHKeR14 z8aX9*d=SEQJMMeah8Nq$N1>iXu~Z6d2q6tciU1?P41{2>Oja14-TrRD17|sE4<18K z#c}dX#oo^f3qJE$f~NZBtlzPS9H;#d;+bDhy*mDE+EFHE2yTjgIS|lul6esOUZns*rVp(;*qa)-Ddh-}0d+ zEV4WB7dp5C09z*4p!~~;g-?HR1S#xj_qQ>XA3*Gb1FwOk`RFhqbZtSk$%COZQ6wDg)!!hUSm#1FDFR;TJ(GNX0_vjQ8;QpMaw&F- zXS+3y7f+o$`hS2rB$#_@Ay&oL@l^i9nxBM-Nu6|TzxApwkN?X$Zo>W6=(?*Ci z?iynt{>j6Uf{mIS%C{iv;eI?Cz4M9W`wO>Bce8Dat0DORmgD5?KCnzTbm&pa*jc)= z+Z3QcW_UM#qOV;;D{fQy!FaI8caBS^f+s64(j?HAfiOHv8abU_UF^3nRx#5@Ke~=u zZ%LMRy3E#(59kg`B;4=6OiUYmqlOxtAjik$uFX916T(jZG=B%hO_;z%1?@X@LG57L z&4PxL5lN}YaY)p}kgJWp5`W28j1%Y2#`9#qH1Zo1i_GFr%ei}LW{Oc`7#=V>s&9eFZKNwZ)x zNcoRJSRw3~WH8k}qSrK3TQ{{gJ4Hy^2*ykagwhHTN#eOAT_dB zY$X)Q+akqp$37`YTCvfKEChSB{2eDu26NG*B~~Ja$>0$V(qWB?Lom;npMsHK$oott zR@tZKrq8``{mK{|=f#pK(m1#o|PlN*ZNyabYj*6@Od?h z8AW77=CTyAassnjFW0O(Z4T14?>1X&XmL>4i~c2F>Ck$bmXMlk`)B|@Fni13!G-e9 z2c4*|2+fnHZdZs$i6Li}l%X!4N?95j#~&z2lVkF05E&%Q-u-~%J zoQ|nX@A)}f#JN3%7xKCUXmdOj0E)Dylm;)Zr6v8+j~0ie?_$fp8J;P}lzuL4L6tZa z@`rCPHkqzYF`ANfiMSX0y>=+TWGp$;$DSx>+m5pJ{w1a_&qH_lz368P!jpJ&?bx?y zO-vq|6Pwa={{)nLQyfoja@9il1mt;T*vctL#ct+-c3o?2?NDylEXm^uXa0`V^X}+FrTV~FEl^@@NmA#2(d(d@nlXi3YnMmh~V!l+rBep9Wf?L7RR9 z6^XMSL2A8CFcjn8D4E(l=K_RZ zE+RW-3qC8dk#aRAN}v%A4SS%6ikmv5nY39o`}n9c5E#p`OZHldpQ=}D_5pAAcET+r z2U#!Zq@Hz=pkj|$kO|K>sDl74M8=6R>+KLB(X(G@)% z$=qj-^x-qj@6^@0PgIqCAFtzurR;#*{Ft5n9U+X4QQ{HynURWJJ146kKu1h5NSU~Z zeULF=rV4>l^CfPD1AyHGC*cZ$$YnP~gM{X-`^R{p7xU7VCG4MZrwFXXA*i{opTRjA zt4uTQD!HG{7YUTsc4a=LN~CBJXMI>{GLUF&ZDBh1XI;2w_e4Hq7rUGl!=LlolnJUZ zUaFkEHFB_5~m(Ke+&!CfBw?9!>p+;CH?=GJO49}dz!mc zFr`zOusMjtgE2-tW{(=H`Iy8e`kbhk6vm$f2c`r6A==q0og zIbVCvw=~EG_uY4Xvbom1h&ZehL}?5Uf^#mXTDS!KT?f)qTkfA@+5n%CbD2qc-*I2N;pq6n(ub);?LG5yTPvWKJIGz z#<;;V_lRHg*f~p`JBFE_ec0#`+0B3WRs#OR50j^)rCI7oefnEwZ2?Ot>rsr0iurC| zZm_HttKq(Kw!ma^bt@qTy#tY9xv`PbU;E?QaTB2h$qS>pkCpYuBRjsc*sf*)$7;;$I7ef%@0L_oEFoLS#N z1`7RjtA_6GRA_ep_M+5*sn~CUiRh}Ne<-5)Rz5taSZ|$4QuPB8s2)7L93zS{T;1}n zPwM-}2(=~|g`EWS)!lh)cofdpQw?!q#+-D}uhfhjT^*6_hnUHul7Y?ztPB7ubAoc( zQ$;nsW(i==VwUBX=Z(di zHY)rrANtV`Q|F&v@{!LnkPTa5Ww9+0(qyO%o`BaOs<|$Y1)7eS*8fw?b^IF4iR$Z7 z)W&dZU;ElVJp20kRt9+NmX}WQrGb~}A1YL6iTk)UE5p6k#v&>nkZChC)J$L)mq5a$ zqv@Lw0*xtT_vMg?wx5*X=Rb9AdU_`JFrHcCY2|ud-an?c^h)6=qr|pFt{%}7-&P;yqe25d?mE6lnob@-O&= zNY@QPg1~IkAdLlA9e_|N;4nzzE{7LbdOVuCRpN70i)$+t~FDwPrnE_{xepjfEnLkIV;H4q)rOqBg6MbA)uH&#Hx>FW{Sm^>vekw=NHlL z!$W*&FfhO4SUVWrxTh)hHIa&IXpJ9wcv!)0U0cl@PV}*B zR-svtxLaCo!)@fwB`t&h58~OW4$KJyjSgM94A03MM(Brp$rne;na~=yh&+40!dXV@;`?e;xBRAo zYh&{r8k9)@Q_`38=atH@*!hAkLrdoBzw2z}>s(g`*_NaG6$IH*< z(0@g5d*9gIH#xYh&ET~owh}||(VMrc4Fi}MPTtyP+S$hEoXQxWrBIHArXTeCCPbRL zc#Ct4NQHtwwp$A)`L2EaGpZzF6gKF)eSh}Vz?E1hy(Us7bNuFuXbUl9VoA*mGYEHX zei=ta-qBbi0OY&{C;cq!@bL^O1oi%^PU<-DonlX-;27aZdgO!h2w(Pm98ii;Ze8* z8Fq>@h?xxcL3LDi#N#fIXPv?8ra&tcsb+%huM#lxj*u~?5i+|<;T1*>=G05K4B8SzxT$vD|b8l2Qpeg{!(8taxbNt{DCFu0_K}B`lHi( zR*D9lE`Y$X8p=D3x6>ACR6`iDM-Yc~rJFY#m@}@ZDQSpXd{tl*cCk+r?WsT=Y9U#< zW~1=ANns$Uj03N3^|yYWqvhIFZ}W<6&+X>G);d8shUz%;S zYNPJmHs|EK{8;98y`GNBbrC!dsv;Jlylm9F#a1NC8np%K&+X!nWNAt<)V_nLClf4s zDrn4-8=133wYf~8dl(@@cqhhFNCN`~)4`i!N1GH`V9Xuw*vdzZ-^fj#x(d13k{#}W zKMdb9e2q%Q5X3=2CyUO@0nHfU-Ne(DnsEh#O53vvc!h0S%JYr&XE?`TvEY2Cx17w5 zW~J+b%Z}tmV=DfiU^_9iJ)yL+N|$R}U^?h-{L5XDh^j!q446rX83-nv@9`XA0PvV& z>{`5;lO_4^Is{bs@Ad1@X+NG%Zqjs%*VieTBX{*FUr93MzeSpAuJ34rU^Nsm%TxI| z3<)5wl53>aH-q(G;5}y{SLjkl0;y;V#UyhQ|1Lr!)K82NO*9A93cUfT;}y{aCIqh? zRIU*3N$|_Dh$1eM>qRS@ONeb$y8aMPVgbd&B(S({cW0tYQ{Jw;XnK;HRq+;3%^x(v zyGxeCgWp=LYf8l=G$VXsE1-7j}uaCb_b%=vZVI`+=cB53K*hJ0v!Nv11HZ zjOhpbVtDReG9YF|c;JRCXy1LZ3rjWeX)LH3cMCFEQZLYj#71RwOfukRH)o^p=R!h6al)nlZlT-0=w|xy-p9vaK%Hm&GX`tSc0h<8_ z?UZdIbSu}_^C8>jnSyomJ(i!Rb>GuKUd6V5i9lgkF(4$m40rGte&EtOMi4$aGe=SG z^3EHUnR6I#WC>+H(4>obH4mw8C`#NukwKznnsEFab#EsyI~~jbrVfKbDfr)fHg64x zrdu)xZNaI#KdhXT6Xpz*=J5@kh+>;ke{L!n(AbD)$(29%`Kd6{qf3}Ym>#0jJtH<< zTEkyc=Jr|SpvwYNpm%$9mb`jL1MwYfhFrn18CcM^gC}aq$bUSjc8tICGmJC*ZZFL7 zl?iPDzyMSFIL^@dlnWgOd?{cQw`MPOu*f?1w}5X@oOl*Z4fWSEQZBkYRQWF)JACNB zReEz}vHzB%aEgQuj%er+xFi8`1m2qdq5qt1jP6PM`Vm!)8KXUuSBb^hu0HC6eFNndgU5CMITe+#}D9 z3pxi^!`0P??*ixVJy(Ap)>Iv~|9C<}mu)mt?u>kTdHW>5GDule3y-HC7m{$VuzP!p zkD)rN5NyWV{ldMRr_1#9zGj+KySh1v34N=%6cIO8yJO?^=CbKJ-!?sJ|P*=pG@6fQfuk?I3tmizf_RCfgpuh9%4XHZD;R^24V4 zO?pX;SnhnK+zQ~Q8-*g8C$Y}s?HKu7{Qa}~yd3T!Ll=o~+ZmEm1Z!~f&; zDlTS$Xw7(kv#>x@vtH@Np;~3PqX9-}IAG3+4=E4RTxgy7p6xX%{so?g2XN9X##JG9 zn_b_w?o-hnHmoQsAHjdFyiqr=-X1uae#ncsq=59icwZs~z{QE7vau_Zcc=cvsUk%z z8IE1={KGr8Kb-l#hp7ApH9Jif5Iq=J%w7TqCR^?P|S&V7BOxi=_-_FsI^x4ig*7jW&un!d#{q zc-78x`sH^Rzn2L{{UhEPQnamsAH4wi51U=Bo*8?H1Acy!&#ccR8$M+?gQ;+FFyqVF zHz{|~4O-}ytdAf0KR*{-um!2yApsr9i;>tm&pN=kOwxrisUkaPuy-@#+zi-^@0PQ8 zJf%ImiMk}2m$A>>U-NtSf~U`1%MBzLLyZIGt~If6vx?oJ?^as>uEl?L;wjLb4+531 z5SGH;4BI12Sp#WQ6VX?@qt~OOtvSgjK@uQNm-%xK@Aop-)zxVO05i+z9@H||A(~~y z|6FJ?KAi;Xt_hs~O3z*&9HG8`go7I-8{P6gl}gC>^o^Ww6Xrk zEFgMX0bZwHdZEvKx|XDgZZld@?c~1|n%|0sp{#$ndwoz`^!}p)(NAbr714%_gF#@HJ{*%<%_x|E=iX&&A=_;&EBqHMC5D<;Qfv3z7Y#I#IEdmjB6q zj&`U|SN#)TDu8Gnv^*@%q!?b;osV|Q)^HzAfS0^IZa zzl(6Evcsm1|F0_TKcy3VNC%VBxHIW|UBQor^U$sJzr>3WaYPkKpe^ed2Y(c?1UWVE zXgd94+wuUvtvLTLmMr_c68Z38kSF_Whyt^{P8t^Y&QF(E(XmpKc6LwHH=PohuA1}b zzfUb*{Ji_0W>btbF!b(Tj!nT^(_&#n@u5V|lf-4dF%yTODz8eJ-T_gk{jY0~ zCLf_Bcs9&tA#?d`Iu;R=OSvO$4}PO_fIm?bm*o{V7+zYJ(JGg(VN)xqi`!zcV zU~l6kr?k9F8@rw}e!#24QswkyFS+-;qDq7r&(pWZ1JVIjuNWgz<$$yk_W_^6H_&>I zjPt+f?+M3hU9Ch@_<_i(RfQKNyeM8I!bcCVp_I3C2`BBj?QX98W zDq-DVVIv0B4MaHm*rI7I`VR}%QL`Yn%_Mb=+}*}&OfET05rObV{aZvno&3`N2gFcd zaxa?Yd>CI9@V^$bb*vIh)>jo{4x=fIlHJ?nH)a^>8V=(e?BhxitjOKAto6y5v~lSR%9~BTq+`GV5is&jd2 zDpUVXb@_`oSZS&Q!)u%nKwVOb-har$P>K=*4YZ3mVrcMM z34fMh2z*0N?o=@j=~D`vy#f723FYmpQK6Nv%<()HyF=nDifrTSEvT`|qUtskbQM_? zGQ#*jX0um8@VsNpPgR(RUR|bKtB%}TqBqJ9tUr}d^Oys`zdnShA=EJ;1@w#`Cdao4 z13@Nb6p-g?ocmIR&qR;46jffAk7l6>3rw0ao!Z$yKwib8 z2J!l&srLw9R$18Oa%8@Z%jyMiC|*Z^+bF2{n6h7*Z~V=6(b_<$CkE8T=nmoh6T^df zwQsu6%NJ^hpNshefmDlwL-zs{ZIST`%J@)y%)Q`C`+1Tzi; z$s@xER({JK!X{W*>s%0jcYH4fZhkPB7Um~@!onOUs#kmdG-qDU*k6mj{s(3`>`Q;@ zTPpqws5fVlQP6+RixNQE3GNXXI<)>dt+|zGErp_u-^e5j_V3BM%AtcjOSVhg&Z#rs znqonI5Ut_>VlfT6|4Qv&U6Pg>U9jf;hHgV~V_2y6o3ae4#ckjHHgF_=)5fFWD4fBK z8$Go_1~kD5WX5C>eD5ZZ{tfH-XEwd{JGvGDBo0EnE@d1ia)$o!)=KoR?Wf`Cy5G~| zzE4!-#d2+^J|FB{Lt~p|XjdP1X4G|MdHkPG04^cN$5}Hai;;g9Y3`1U#MwOx5E?zQ zJ%dA?=C8U_Sh->XIX2}F354!aGVt=|PP$?@KJa4q z8fRCb+*_P(W6F`R09`j{a7#G=Ug~z~n_G$Kk@QuLu*j|^+Gxx**B%yi_SU>=w?uPTiB2X3*W(Fv*MzACtVFLU8`F~zp@0bi%E-CFrERByxYzfQdF<#$C@ zuO~(q5PG_7NgT)olgB2Fj+_zt4|BYsrO$8a_7@oeY7XsJW)qj;d(P908@wa3&x~lW zScQFLq|`e+65`eWYPRyp2g8K@{^rl~T?oH2^SGsx47%E1=wjLYzc9|$&?stCGTY0p zJ^w1EUKURVbmF>^{2!at}7@JAxv-lt9Nj7E|s+`sNLvz9EuI%g&68+zygnz;>* z&zWNN1p?m`(W`ZS=5;T|4d6;O3;PIqn$k9Vy|Dt0}KwM`P0Cy;FrstWB)K*52J~9qqn!3@#oA;SK8z5 z85QqXcb%yX##G4~e5}uaj9zaghWu_p&YnUQH}%W|XeqnYrUiYpAc6=ZgJb0K~xv%U0@hhNmQMX_o^GDHR0zDy9CXz`BM*OP}* zH^l|N(mc`1Vl|BSU;j(D#*h*P~tu7<}( zXeSEMyrSi~LK^fGpo5)NEve`5jNy-tUB?MgKCNukErYRO;?vcP2DmZxXN)$$K#&1P zC&{1?ee31L`e9Gn;t|8Ov}{mSSCZhc>-NYOMR;f*Q;P>B&RJ0yy5I!|nfG0hB(o^U z^iO&a$Y^MgroyE&XO|SKkTS&KN7v`&dZc-WuLtk$cL0))-W2Zjdl!!MBT6-PbllDZ zU6g$wzQzT{J~6C(=EMN^r6wX;p9Pzg&?~a2(EKN}W#7e(49O2fis3M`46H$8>eVixcAeq&a?=^i zfAk8A*lYihr}p{8(m+J+jFO-wLzSo}tlJzeN_`&tPPq?w68*}NINu|Tx-EEF99R)# z?sBT;`?~z}Ku<#}%aIo_&_Q6(E~Si8_}T1Ho6n2N=3l95tvQd22liwcjZc2*qOjtz zgS@$;trSq~N^$iiA*TNFu%E${YQKJL3Hm#0;3SFyacBA-vN1-%aGT_A|Na*;ee)wZ zA>LKLSNM_{2NCTb5r&o5h1sXXWH+^On&U7f8wc<+wB#S?oaavR<*e%R1+iLse0ffV z_={z7%K)vE_Y=dofsFVUHj9bEbIZ@-`nHmvun_jeLe)rJTV?1WwzG`B>ywt;`Qkcl~5HN~E zgLSbRe%RW&_o^NG5{>~oSPi@=OvBVLmHAFjGsz9>#0mCLy%{Y+kV6mdgOrT_+h9dX zR%oq}YL|^&I+JI}qP*(_ef17X$as+^&4rHIXZX1xitctQ@UtrPiIy(>QPo>D%`;y{ z>7-O=#tW=BH+iJLK^BMB=(NW1u+>X?hxd@HGTy-FrTCRYgQMX4)Qx(@Utb@>lK`&~ z(pFc|`=Y10A&o$oCba2c|3)Fkb?`3I(J`!5jdEW7nheYq3?iJiHCsjRNmAZ{2o6AZEASFdgks@UDubhZo)0QBXxGnI&kZqrCRh4e9u{YzR zC>Ft1(~{h(;7arJw8vk_UHafYLyHVW-Bza;TW+M{SE2v6q#Qj(_9#7|x;#aqZP)nC zbXHi%sn)>maQ5`N@-fsU7F0z1D`eR+6mCxk#fGSJUj2jrl@IwV5h_I?X-c|^21%^w z`ER)vdT=ti&VFcZNwwMfC@g+xpeP)7_P@TY&lS{#Q;}xeEdLbO% z+2^D7N@~aa6>D_&3M#Jn$TBXA?CI>$ zuo?Sb(uK{wKj$80fj{7r?`jfA4SS~D`0L7b3ka&VJcv_#Lx2GU3^sb5uJllLby@ZB zFgQBsZJ-n|sYr?A0IFR^KGcu$ojjd<2Lt7czbpfwY#U$5qVtV1if`76!@Id~T1I3ewJ2yCWIB3_2U$&&A z>nEB(PXzTu6|~i?dji+S$9-^v`%c1B@aG&@zWY6NUNA|du=#t%eqZ;D(E;+7{C;HT zj-ZW9`^TCp6qsJBnhl-cwga~xvr$~UX*jXd?#s(<`*mpy=ZMfw(|*-~`iz8T&aX<> zjK(k#-59%!1FKOgLeQbqE>64z!0pp?{Y&1cyUILp_gB|HKm}vcGUw-`I2IguqpC$|OF#5x1kD zae|@sx#JrKz%2+Mm>RatuJPY@?z*1+Dl`^M?cDj^^+r7`;axp@x!a<(l~0bYvv=Ms znx^c@VNQnmRn7htX;o6UUd8Aiep_Olnt?IFxb_gQPK(~q|G?7YQ-t>r;!mw7e)nul z=z0s>Pl~Dh)Lli6vm-0U@*+{XK?c29;kj7ta5T$(jj=Rwx{9g$Pw7s=mN`2J?#?;t zOtM;4Uf9q-1@s|GHHZH;&G`XSLl3vXuGr!~lMucM=~`nQ|(fkfGZB zS|z%tXmb*O_rC1SV-rC5_Xifyw{+}3SPRtmbuy|+-*9;aV_;^~ zhc{E^3XAUl=Lb8+mA&Feb=uc|gyQ=+MjoJM z&rV^Mj~z$*!3bOoGatU`ZE%~(Q>-L^T`$(n-Xv%+E+ZeaP-=`q6^B2th*o~0;TJsd zPnA?t7kHR9W^X{g8~rlMC0Due(d_{cBKwyFwsxvU#&8qV3#C-@|8acB1~Q?E99Qt0{q(VJOATB>2XgveM@VQ|48k1Ho|%**asvI$FbF;i`C zuqlKL*uL+cYaE`B0?WD^E=6lDf_X36F2_t^fB4pFNHd*OB?db|8mAIHiPL_V*lCjGJWqiTw&t>MA3U@ePsvxivJkBUqT$T zl)N_4TlT^qRpUewwf_D~`ENPlJ(*F1YIcXx&xSa21b@h5E=eO6rX5q&GB8%U2HIVX zxplX%CnD#_zkc(1RdBOJLZ@C^pBK;JBI1ZX)Ku`H>sA|zA1Y(R&J!z5cs!VF8?)(t8$)_qVwK>Nrpbr51*LIjwzvlU(TVa@n-40o~wC|BsSTOQg^9 z^lkh#$LYo+WlC)H^~!k~C7*2#XO1qg3Us>6OM#WS57nBhFS+{*WdE)+`D@bWjm3CbN*bX945bOg(@%dx>ZaP?!k?_2u-O|!Np?BOjGs3DJJ^`#); z%$fO!>I~+=#5>F9_lz&!kUiBW6gxT2_A^~QCf*&=g+gqEG9Ud9(mek{3=OjRDYLarO)vQNN+JG3j=LHWk_D<>j|w@bU3j{=tR_`{&-BJ}!sBHNdaO?WtutzM>2+^>N3-xp+2=}&y?s1b(Z7R4T8RfO z0gm@K_Pm;1HvrKQm|pGgol{Z6WeYC#OhHm~uq`MaVZTRYpEP4Yx4=Whl?eca{WX3y zYJe;$FPUaJV)$i%;Q8m013|tNm#E49Lzj z;anwiLM$Ha>)Ci`L!Cm03*I|WQl*)jV0Cv=dJ^DgaTf(6jD@z?0q>&TR}bcJ_!7t7 z6akF*wYZ|KyuyK)Fj7_c;c%><(_5hkX0GWY|G25tc)s+`VswkvnsOs>>!PPmltv$5 z{^KILmZ4bnb$ZmN&SB~DnRJhFb8(y)pby9t)9|6|;P%__fZ$_H%+putui1~?*y;EW zS|Jah_$rM-o59o}j3SmW`{iFRwXCzO|MJ=cgFy5^Ha1L9aor{lD(XR-xIyGK;833` zZAnhEV0BIQ1S)$0`KWr&(bFQB?o4ZoI~^fzadk?s3|@JBX*{>GvQeJbQjl#2d5?Mw z<_z6nE7N4d%?5u=JvfrP1MXPbdd{48Ajy)GYzsQNI;DPAVLfqFBW~z7pR7N6Rk{E= zxXK5iS#xuJb93Y(mL0U}yH8zZko!-EmE`q{!pw!;&pjpHsQHD9(`R&F2kG|qf@Isp zF>VRKxEa_LS5t@IX=fXR*Z3CyMI`tuQtgWt-K57?%^cnozk+&tdTwHT2nG51Ie1fZ z@2P)`mW;v%x9~d1`H^l)G6^n$)Aj>89u2Y_O^eqS4&VD&es&UX?_!Tp`!kh?jf{FD z8GqnWAI|@TahYsrJ(!lYIchv_*l-$q9c@owaE-eoXODzms|lqraOL;sC97pIZ7FuCA*1KfR7}%~6k5PL9;(s;~5yhktoA&qjSX z>v`YiYcQ5gkqb;Gl~Yh{yfbh53J@2R$8g47rK(D?QFFEw88ZzQt|bl6;1L@6(HHr8 z#P!{=R@2AyZae)5H4Q5aYpzEMud~!OLQ!u2;~TE}Kb9j^mdikqA`KG}t{X{0fXc)g zQ~#nKyHb$-;@{bk z+YQo46TkcV@odD31iGswQ)O+Xf=hR49;d<5R-NJ^+TWgn%3CxjU7Tbkt~qO}GRO92 zHft~8kn%Lyk)R{u1I%7y)-cH`mT!a~I(vMx>N!F3dRwm+HG`Ak3$=e5v;f+VM4Lat zsQ%!3b~AF@3=+b8R|2rM*8~YtZ(UO(BY80ZI$$(O{6;G1unh|oE;k?Cg1wIl#xGY- z(dIMH?^{HrmI&);H-)ghKH7-4g3{FI@oqDsJmmx{cEN{>aQw{60Bgy9#@>XP&f$sg zK8ygM&KM9Mro6k?-~VuQ1f6c_3k`+kx1zadJ9@h)o1fLTmN%|OFP_wW<0V8&$|g(r zMU?%MDEpd|lMl$r$bIc?kM$$F4-J6%0q6(%m?;?|BO~*giK$?UI4Tw~dCBX$xGd&9 zva(c@6hn1C*Tu1&so(bA5SusX^iidw^;W;dITHaccAr{maghBLq6^Wxl-=-$=PohM2` z36u>maL&^WwbKO?s;%8sdlkp=_<3HYE_BivKb*#lECd0xf>|$?vqoMn+}v89@RMGS zlFxfkq`d9JM~ZcMz(I~jiN}=4fm+!K_df$337v8?+#ew0Yq{TCiTZ&quqV3I62%;z zcG+@n(@W{%{A@4L^_J*kf1h)cZ_zHR?;cK9oakY_hPFbRD=U=#*edN$*L%BmjL2UK z81H~hVE*tu_KW+SIVUFx>^cTk;7!~gHB+?dEFuze&|Tv31~p91=lSxe&(1us=$wY- zf`+9Z*u3qU-1va+^0aN*+D4*P;QG#Db0hZlXk{Uo*ij;YkKL{VI1o()Ngn@yqSdjGe#83~al z*Rg5lu_6kBefXpgL7ll}7|gL(lv4WMALHVo|6bMrU89A1jE=v+J+2j%2gs$(Fld^* zy9H@#$hKKLBw!Vm8AhFM;jW~bsaK8v|x9io?*N>7hi5g!W>Fvwc zHm*vEsW}H-i380I?KK>(g)@_qovZwL0_VmiaKU z9&=Q1#yk%*XCB7spqBG|_3Rlv4f#4=Ia!deKb4SAK2{3y>1aG_Yb)=U-o1IVP@I?0 z+E@aprJ=Z`vADUuxLI5zsVkJ!7Btr8*H`C?t8&DmoZ8Clnu@GyVdfF2s+>i(TvA$? zdbGBVkAUP^Sy?3|C8edMWo2bTp|AoSB6L)vqpGT^va%8s78e&=W0-o|>+Wx##xP1U z5|bkW;sgHK{qFx0JPA*X2zV~Yv)ElJaSsVl`RS9yocQ1Guc}&VPfL~winsC?bnMCxsyyIB7C^zhF;?h-yhfPZCSe8BSvKLNP4hkl8IU}Hb< z$&*=<4mm?ff`bIm6z+UBA%nV6>uJ~|2o*=H|VD9?d|NmOU4icuGhxgpdx2G z=1bp_9&I}l?)LUxiNy)dpOIOB8GUOWlDYal=_Eu$zD8?Q!CBULJ=Y|_<*V&aslPB;&Z7I0EJ6d*mxVBiPS0&Cnd?)W%= zDv0BjS3diLhx5(sOzZMgCVt`J{DkC{2wYI0rx`SSiO z0QoPBkRQ^s$Xd&9E_teWK4m!ixwaXmN-#RccIne{#T!p#?PFfSZVIy-`M zQW3xX>QTaz8}!P$XLQ0Hc(Gm6x{g{4fXAoT{S#wwVjG9v4LuF{eF*ZG8Ut}UyEaJ% zx>~TtSwc4G2a>)7^?TMi<)mzif!N>J-^s6&)TVpE$e`ED_w}6IxH~9^CUMTmzp7cB z9~%%~Jws*RvhP!2RaJ?zX+hcbN(SV^@~;CD#O+N9&Tw(znQYUbS=ul{oQTd=JX;vnz8X=K)urJb5CXQ82NVf!`dw*K$`Au)7efuOXi@ z7k4=et|VA%d5EFe(`EzHH9VuBCgbWyqvg}f`2h0qa{k7~+Um;kyLXFag~^>QLs z|27K&`~&Q7mz0v)Khpb~#D!4xuPbbX+W)bWNSJ*x4IPRK3k$JAUsF>90A7ra26Qx{ z1N;Cb;1rk^SmTy`?~&_gG0(Z>RnI^3a{Vqh%ep*OiT~Tn^N_ahdUS(T9@b??DT|C-ZRGsjd_x;;>*>p*LiGc9FA0{lU z&krNKJrk;7VQn!iWRqu{h~|@X+xPx;1`|jXali7u?^awWDFfHKF)Ev(s{C-kGp4c- z%*es(SyK>7`1@ouR`hg;+NxrS(7?i;hL=OllOwIKCc2nbeY}tlARjN}vmigTdDsH< zl1XwA-oOIn(!c7wLjaC5z6Y?2Ob30Ny>K63+ zaRB6BCJx~a-J5|;eCF9eR^534`_Lg7ngn)aDCM@_^uA8dS?o7H66W*LG4G3B4Pk2e zEE5i|Ved1C)SrFfFjg zt>9sR+xhquZh2kud0)5h3v#W?QlJqn$NpMMTGp*uttolsfJqq&GZ_wI&m{2yTQodTA5c>xf>D;(x8`N(sZtk_r2d?E8b)Y)KNkG?6s8L(<@V^wBH@P^Ym~V;j4!js$p;GZf zesdvb$(FIEZd{IK11f9BB;`A{*_{_inz9r7jgYUTA>V#r8@GayHF-yGoDDD_-+@l3 zqn?0yB>y9M0J`tdYxR|)PBAzi~_)7$M(A}@!59UZfr0mka7_R28N8x9Wkb_7A? z%r&mZZ^=?nUe1>XM}mCA&Ra=I;=QlFag}xV0l(qDRp76*trE=!;Di870>CHcWT>IG z=)~HxorFRm(BmcOXhBD7Yim3E041Ot%n2;;sTE}vR-|1Cc=+q+*h28TnsKv@X}|M- zc(0_;7I|V~JqdqL&w{M_#u8y^{9i*u3nk?plFYyQKm2Q2daI-_IC+s zHgzEP){5>0JiJByTVMK=@PArQRjvm}=Kt_PVQ#CWsH8lzR>Ch2S=lE|%x;dqAI$d~ zZ@ZQrO;tfSs1L}mqJ+LLJ~=J)f2$}S^LbEeb>!!K?e9T66%;g-HPxg#26_`w&!s(e zL%rf|aRTu)w5-2ndaV5wTEz#jh<)|3RbRC}xvQ8#3;A=}?bq}sz47|Ic-l}OTGqHp zt*NshKLA5MQ0NCqH-55ytHvT9Fh%ebk<$XrLgOu;pt!DK3y?2_zWSJd;KhinsWr-D zf3(o)VYmt8vpx2?QRHZMYmG$|my(AMm>&DvFC5VZfl_f@Rh0;ksI+oqWt$`6izI-}MDoBo2i}mJ+cln_ zp{0T65~&2b7a*8tLH;0w{M!Z779oF!u@FE(K4@JoLz5D_fb?3aBm-&rn=HsjQz#_` z`BW#P)(Q9deG>A~<^s+(eZ5)FdDDG;Iz4CSg_(VK?65qX$7*e(i;hPgdI(wGk#Q6v=)u@!xV9Qy6ARF? z|6h@Qe@f1@Nm}l$mAMCd-KPF+s)!_lBN=iQJ&yLHn)Z1ruCO3aTV*VeBvZm^(Lz6% z?KgJ2fq;A?#Fcp1Lu$?XQ=pftu+&%rs4f2@s2LvJ$SiEle;DP9I6(S5C9R8bwxUQt zoeIorrOPWLVnE5$Y9=2Z>aI_B4D}|0yoq36A||$~Tl}KGVN@m=Y)&NvPlbaJ@8_rC zDn6fz&w+dd#>$z^wMo^st()dGa!`LpZBqZRe0UA}+cS#Q=_BvUHy=-pKXN4Xt=z-7 zHM38GG~Ac3*E8VXh>i$l@ghADH?U6c#Oos=->}si4;R7*VJ>hL<_0;eL&HAd{*E`j z9^S`~ya(+37BsAKt!Ce_1)UGhU9U#>yU*~nH)`rQ`zPTLr(#3GKa#_K!OG3Ww@eE7@ z_*e~p!3J91I6StrtLJH#e{=tj0P>l(eWd7bZlahxRpprg+GWz(!JfLoUh!~WJ(Gay z0B8^rI9n&{VbOrJ_L!)nrSkZgADQav>M+cAb#+Ol(w?54-rnAR_5n)3DKIBEF{yex zDqC8F?OmpY{C$Yd_S#n7+Xf4}+588(M4-{`W4^WS7GX;pOCB)l`r1V;ts-f+`Ju=u zVfF)O^!9ZEJ{29^+))ik+FH@lF6!$sbINuyDaq z$kOU!Pks=9tzXfsUVgzVt#53!vpOrK8hY%nG(-1-Td@_L)p4Xt zzC)aX_8x$cZ$P3FUj`P-WKDj^v+=x35uD%bAp3-aU(fiA9QypPAfE=ic(H7LemvLf z&v0Kr)oa+>2=f0D+keoI?4}=rmG~P>`E&HQJweBBUbn(^EW9%E)S*pzEuVaM5Mdo+< zxNsw34lTwb? z@>1q7EL2VUQJec7WL7?RI(N<~O@-PrUaMV*0>8-}dg;+OJ_SF1he802m5}lT_iVr$ zQB6iUeM&dsTQH!-{jY|Qe;aNKv?(CJ^>QnTB`oA2{eVOU2mJE}Jtx5asmrIwQS{Mn zJ!strntq)q2ZKF;_VMB7@gevH0W>+%IyDLj{J{U>@{=K1Z^KD8XCt+>wE>tP8X5x7 zJ~A>gIyyQwHue%7F<&@0XSoyOwe(S}NC5knb=C)OwYC zZB4GWoU0Kus*o#GyIRY#skfFE=HCO^*5u5ZTGfU^p~Sy|@G7;&?B#0J7WmSu)yzVT zLb0k)X)O1N3dpA3$1{($)eQ}$>1uX2zVpLniJOY-n1+&g7y z7!9nQ9Zb}R`}MZAl;Y~#QCTBx7@Qh~9}!YxnCJpu6Z}EJg#SGO8j-b}SX;JJcXv09 z^b->klarHEQ&ZFEm_Y~l0ZPCrFfBNR@}JR9gYe4;6na23(gV#NgZ=WGq1DCV^`#LD zc>hy{{2wUSGQCDH_Ke>3{=vBQv5-&y!K`dCsvk<`)0Z6m@Oh~ZPHWC(w(qLZyuY`H z*7Ubk4K?{Mhnk>HKh`!gj%|ZLW9VL(?g1|pP2ih?iCK7jG(OUCG7TMyfbI@dd5rY4 zv$L;Wy_%bwdyS5HbbueA1e^kMf>S8}8T|x^eiJdwFV6L2q<_CKh`}Bx_W%1ymfc5;lrc+}*u+fyLd66}RHPxEFVa0!0gpLve@V?z*rP_u}sEkKX&+d;i;W z_MF{hGLxA}CSPU}rSe4<4Vf4j3JMBM?z5B{6clv(``7vd%zF!v3Kch`!uFx|5GQZnKB z<4~btvg%}tXrZes!l6h7flz!&qd=Or~)AZ6eCl1FUk#XYdxDs z1Us-$rig7Feg(e0l%3E}sZ$Jz#Ar}eu%psj`83v^$fn8&3BvujRT&{b($`B3 z^n@{GJPTMvx+f@7X@6V#r2_N1Y1G-Ba6Tv_u9}dSe1AjnmZPKtMEyShNCl&(MmakU zZMbN%5-my1Vx0zek>cb?q8F)4<$xSa{xaAR#9=vsIek6kn~!S30?p9B?#C#Tig^Va z_-81T@91q18<$Dy=&?jx<#)@p^$>n$YyL7GTVf`2;@ z;R!K4O%invx$^S|HUI(ECYQ?~3Z#qklg89u-f(e-6Rr_#?Gl_mXJF8O;#>-} zj3~;%Bx>#Kq*5N|=u%M!`NH;FsMf{>46el%2~2H&a!AWFj)u4IkeEojOPKohI}LLG z45ihLNeFF%39Iag2^}o1a;CV7`g~J91g8Rp2L~led8c=26?){Y%x6a?4s-vZH}A{L zx--I2hd(9$sP>zDKx_)^>rqGT5sgH*pl8G<7WQu_S|qmcdcvMeX56)30|t?}UN)k5 z2T3--=k%TjqS$|7bt8I{kb_@i#<6c7#Lr4<(B8KCL~otWoM4-In;DupR=EDc(9cyq z-@3`FAm3nwbfs4I5dOYpX7c}Jx?%hnkFEt%r`1Pn>`oalOg0v^1Mi}vxgRB>MetaJ zP#BOeYeshUb6K?Z8Rt&a8!*@Vc6rg1sT!_&!i#byYS@$hj1%?t`%+mM^E~Wp>RV}) z+>ri|o5`v1sTt^#yBOhgaOu#svBUJa;{^TD6w;6YA#xKlO&kr~A z+Q`WeLdY&u)f=$OV9MzQx-W9r(?&(i_;-!SO4v&%xX*8!7nzxvsT4+RdD>b4%GXtA zy&P+zGr&Aq1qzS?oy&VKiw}Jlbm-e$q5Mpf6gWu}j}J9Z>T6n3+jVSWO+cE9sCYi| z7dluB_p^9Ta*zN7!MmGK2TJcR+)B?k!W%J61l^$^sTz!5K`c(V+aXDRQ9r`t{pD;% zI26NahCK~N%%u>5p4?dSL=g$p{e+Q<1xH0`9*VXh9*XHKg|8|DNMMcRFb(6QJdGs4 z4h*H?_)J|#F(MI1#gO3ona%~zTI`haE&+O*=#n^HrjuIXBLZFCaS0St5K}IwM8qaa zAa5B0<;DOCEXtRKNc@KD2%XFKfFSPUxS_rTPMAQ2L-$2t^$eQ;IKm0_z9SA&NDk1N zaB{$>VJmVMVNKl7j1yWS)JG1OE!Onv@HdNqYbJCkj=$Jp-(ud4V}t|sZc;KQZJnZiph`j)bo&GF^x*LP)mP8#nPFl%C2F7r=P`98Nd2g9V8Tur;VQ+H` z7r?`Zmc*4W3cmxlFknYe97wb?9mLB9S5@O94wH zOG!&)S8P`-SJhI!ZuL9KJAquoT`XM< zw@5ejH?jZz*}L2t{adz6y#4j>?$+Ga?bgJ0)rNm>M?cND**H#bQlI+JRU*L{bD!-b z$&e4IDaj)|K1(@cGJ-wnjClQn=qP*NS$9`PS8`WGz!x!2j!z7~bT>6?-J9Wb+g@it|CHC8p_{u5?;-D22F%GKJNn zoTDP6(xdU3!%Xx{KAMM`oh74XkEPjKer1D2mX+UBDwXUt4J5P53@b${sfsoVRVz3u zMyjlfy*^)M<9`_wv#r)jn%ktmQJTuAvVW{#EhfwNQ}wZ_-?r=mTVxEm^X#j*O&ol; z$6DKL*f~z+Fu*d1c8EG95mps8>Tv0h^Rs?2eo=VLLB&NYLEuHhN983t<*?)KB}^x_ zAig24Cl(~h0g!Vq8ee=f8_Hws>>_c{j zcboez^0(TPg47$QU9A}R2={mh=n0g6%KwDdrkOXZGIKz7@L3^mzG_8mnfJjI(ia*P z-fbjy1g}5Nse`$|uE31#MuX*3$GuhZ)|XrKBC=$%`3@(;Dno(}t&fe#*rScuj z+Y-ZHOKgEkgdF3{6;zqrLbUBP5}!=9`^A3QnSb40m{1bD@|aL#E!|Q5Jkwb62>f<` zv4TT`=SsQjew@0Hzd+&4<~;9FdyKq3i^GnSgC&}7oap4w`>kp6v{5Rd-!H2AZvTw` zXDF=~L&FK)YDVjweVw(-fXJgC)f0Kq$0AaNht75P0JAbN8<)d-=xJC@>+jYxzc)gb z5GQ|`O^5vP;nLvzV*WgS4L+Vw8)q8+%D?Se@>KI@qqomi_BsCAvfL_1BwCc%-|eF; zZ}BGKSZ%1;R?A#VgIBLty4U)Z$M!nA3M-#$=BwxUMXf}6?<0;WLtM5FKauC9T!Of& z5=Vfu%tbHbx_U_Q%@^$)EWRXn%L6;eV(~l5n@#$c(v(0ZJ|HKt$i7r@bOSOZS*+sXjqwUnRg4AehGH~ zpSB_%V%Yf1csqz__;}W9cQiFB7gTo|m3KKCUx{7ip8m~}m5DzU;R$&D8wE}ZqT0(V z?#u2oQ})aGB8=j9YeDZrm{_-<_(0P_SoQ|FJ&hfEawOsel z^Vfay-Y1!CLRr`BY635UV<#fO?Cj>Re;-t9OIj8hwp#%$q)ie!jQS~t_RrQ2R|8)c zmcG)4$?Lx1cX#98+#&uwf`=MDg{ryfb3`6A;-7Ctc$SjMMek>e6uN{y={_D3*t|YZ zgfpb(&BE+J4?$xL^-Zn~vJRJyn~kqb_RCZcXU=X5`x!Nv(xvz}17f+Mkr0v3Vv4>Q zK}Y@>+8U22U~!A2Z3iFs7w$<)VoJG2c1hl$Jn=GstHFl1V@+{xYGt!9BhN$gEsSdF z^XkITc8PVzVhOw{qosunnO%~-Pv2?j3x@0$20SahpP%OY9A-~3gbW?CZuA!#+hIMY z)IHmGe6Rh;p1<8c!K=WKh43JvL{L(h<*}Mr_1($B$t<1B{6dz+DiD#y7yt}u_3xa@ zM`I{Ct=ngp)XUPy`BiJxy^4(C&cFDVP9dWI+96|6=*pe~Ehcfh?aywE&`{KOk!Ovi zi}L&w{Mn=tC_JIsd=Yvemy_Qy5LR5K+?46%bbHZ~kXZZYpzdrZ4TThsGX;S_xO|gs z$DmV7SmkPmX^cDND2_MZfxNP^!nUGo8nU+FeWW!FUgid;uohMppKdo} z&!w1=pZo<&1zXkV@z(Kvo_@QreSDVfmc3r47xrsyv1ecD$>;>jyz?Fx5wuaCVnslhO7P>!;8@m7R=a_#nUE1x>Bf@|7pJ=;g~ zvcfI*csO++qi3kqe5A?(d$grbNtA3*r#S+iez?_3%X_FJG%t_|-uZOsRlk@3e5>@MLpawjzBb@b*V3^t9LJ8?!cxo?_I_c?t(*Z{8!NlG~(O=%bCWoa)K=!x^k~>8^5qPJJ zJWK`}Y#MS}H)_*rL*;kY+qSLN7eL`sEohepHP&V-;)s(P$XkCsB# zoaWwR72PY75-X%SM$m3?KWAsp;R@re62_1q@_{fS>!tWTNX43nmLG7e5A*lit-n?n^BqxA5S~i zrr0n4?f5KB4UhYYs_%`lujJ~4ZT#N=Y+gURtClYekus5J+RCx-&YTqzIfVMr3=c&h4E4<%D)Tp#cMWlF(JT}a|M}fZ5EKh#Z)OtC2WabDWG*GI+0jbt;C;+RW=Q-rr9 zROol;4L4D!oph?;Q%Fl_*urWj7a>}g>BeIDAd93NMcuDr3QHC=kx~`x5VZz+C4GSj zL6d|>Qn;jVNE#R++E)Jl<-5|S=@Aozalv#3ofX|j9VH#ddh5E`I!9B-J*U5fd*3&D zUGbb0oaV0<&J{0;t{5+3uX3=?@sshMsob>rjQTx7%03!iw=B3{*hQ(xDKP3<*IieP z<1FftD38&N_%Hz(>zF5)gf%)#67z^lEc4i^d-7_F9#n1JrgOjD?S9FMV>M{)@TPfG zN4S#dCd9bo&nKG7oCr1_aiBA;v@tUyarkMqzI{FybzE_{dD=R3QsEOZ^oya7XW)cQ z5W8daW5=4P@4z$Z3kDnjo(-NPJoAGA>RlA!inWA&v{r0sRMN6Lx5?G%t1y<&LsEp= zrCKHWIK}wbLfWF&@Yx61+w#na7WS)oIWyhQTbU-MR9f~0~vGZMx$=)Nyn z45zdwaLYr`f(4ku~P2O8^jylJ}+<0YxZ)AI7X3Va4Wwb7= zFl_cmLk2kEgl=5%Ctn@E1s{de$@cDc)lTi6*AU61>@M@x{8kR;FxGEOQ(SLGUxV%8 za7tBJ4u@Kd%_h1y`9}q!&oN^)qu9Kg+mV;wkt?EE zvz99rC1zc8pLxH=mr(%!S^{l;Syb5MTie()_6dz_W?KB5tw77EtTp)HTfDVJ%*LM;unBVc(F75a1clF}%c!!_}$A;({UJ@!0HV~fk9T@AYyc5kC z6&KrrDOeZ7za~KCb2lxFE$4F^cZRYsnYomOpA|RBmlh_R>>tYBCd@!L&$@oze2a8K zeWL!=>er-+!fEP2>XkvW!GXbm^MQr?UP`B}D{smnHVHX^gPWv5ZFy9%s15bh=t%XD z^)!J0{^jCl-bnEljXHa0mxSSTe0>*Q1|WkiZR$Srq0*Pit=5Czz0mLGX>#D^L3U$$ z5~f_q#Tca~;$~7f7fK&m_^+@8qOIiI2RufpuL*Y_8Eisj3U>BCgu|P~$qoEA)iSZ5 zhhB~}=sDQpbnf%CeinIF=*5>nO8ESpQlw})Ur;)}_vdf^FS3+Z|TKsbnb{og$x5((QaRiwc`oa1gE3%&LUTF8`_lpld;SG`JP{?r5acY-x zKaR476X@Z-QD5j@X3UhK7E~h2rI!~2f7>STc-a_DQFS}c zTE3tmw8&%*&K8mHvf#sNG1yZdXTIMOWiy5Ky;sIpDC}?Uo@@QO2qdDe{Wr@uv`NJX zn%UDtegVb>V5H_$Y4YLCmbOec{X7EXnH1vId6VlBqsb|YI4Csa;zvC*cYJ}5pC45p zGObz;9+u#ZkeQVo*o#EnH@*)pF4MIZR_?`)wlNCn;spDf0s0UX~OeZSR44Z+DdUF)@YS~=hn4M`Bc!uu-J#MJTJr6QRByd!(?f9 zqcjS)Yd=aW(C{XF+qagkoTDf*G@1SAa&J4%Ti}SY&OWg?E}VmrnPU`bkoLOqP~bS_ zRBIE}j@trgu4vS6ezq9!Ei||Anzg>UR32Au%K16>gL|(b=J!MVrFPJbyeB0std2ja zf!-56G}HzmR5`z`?HHY{ZF%9RMNeok+x_Y{SK#RHx2R~NDV3)2B=e=4^`SRtL%GqL z&v=Uu?{$VOYYiPY9VJBpGe>(i6LUvX3pP)Cr}xqW6qJys!23^o3pW!=PkTEDR{>99 z>iComI~^%&dkY8GcNro806^$J^#51S|CacFjMV+#Be{4u{?C#BN6-HlDa8Iy zf&W9H|61!mt?%X%K^9{FU#1s9e*F^p5eh1mLrzLu!*l7l<3ycAyYa2O%>4D|Q}3e^ z=N01qxbtqNcA22u?u@WTLa6$dU_aN+6G~G59SC!j$$(TqFbp2plXhI0zch0|hcRhEnlOkwj!O%yCN*+i8qItGu0?as|2Qo$!z&HC)|OOU8kc88Y~^n4 z;Rr=!MaS?!D0lMjy1Wnj#0rdK-G)=*+$hlh`pcd4pT>=ndAe?g2pK4V zcrE;_4vwx*0vt<|mZGnROD-#2Np>5H`{?CZglVZeLOzCCUUl_Gs7eiKyXM_t^N!f% zH*Dsj=*d#4h9J*Hdy!{P#2FY=#j&|=h;O4R+xLkG*`yYV0B)TJ-yU93E&u^>Cfaq3 zy=9rQr80w&$W?5!;ovd?>@=svQ1Xrb%um&LnU}9I*)?~*230$1+Z;AK+kdWIY^*Kl zI$G=6`|K=+WTwFk^FNY^#297s6*%ColHyF{aN_v=wG=zS5ZwFnIcbidxN(>nQdKTC zF#Jm|<{I0t*gqJeOnwY3f&%myS_7#i{YY=zh7tAyG;*J{9;H;yDjtC54603h($npl8g;WnK9aI2(vtQiS1js%h* zRi~sE6y@RH{VEC|c!qU%FNXIKy7MIw;y5_>?9z189zKl|l60i&3vqXktsiku%{kXm zp65oR#T}v$JY>1upmqCNa{{gOZ`K5^IJxOL8I1J1YTFk{303YAt`;Nl2{YTM6X3}( zdi`5^*K>EH&@nT`u z5qJL~=BvKuOea%Vasr+OsmO=qlzzZZx&6QpdZKK0_Hqty{w&EK;wbN%b=ig*Nc4}X zYC!QnwunkZ9A+CEL)mfelCGHXzOp${7&0<#8KBHb?B@ix>!5~OTQ~F<=k=upF5)!e zR)vW1Q|IR%H#>bodA*FPJm^rSFX*V{OPYCVzLf@kwn6~Z#wn{W}Gh4 zvZULo`DHlbaG<8_!Cnl^o0|9)@<^m#aZlbS*ZFb&T_p>9J$XJ#&t#j?=a650SNt05 zt+st!3gzXcQ4WFu3ioGoYqc$q50zP!M;CwU{^}wMR{rkRBUg4*n4UCSrmlc)oX(AU zdQ`lC_Umai591;*wm8I5`U4wQ(s5qv>^G>EU;nWRx2!xL)^!#J=8u zi?yaVc+iFCS0qF1l@=(Zz8HC17j>abAAY;*%gdX3ptW>Pn&s!gOCvoPTsbB*qE8qd zIi=ue{5;|c7Z<;`Jr#Ja!ps!FQ=5;bom!?z z(42CPDHx*2B)z&8xtv6SC~p05!0^5!n7ppTJlZw}c}le?9!fJW;OJv>FEyBmYKw1L z)I(-_ct}Ad@dep&kAjCcC1=y(0%BaEyf_VHSL1D;1abWyfhBLZqpb|Ve-wHI+X?2l zz8Fj_ya)u5l@5JynDc-35Ll6b$qfaPD$4HRn0vkwz6e)vjw|0-L`yU-M5y}M1AQ?s zPQ&*~UH&Sn%<{b_ZuNNgP?6EMkh$1kECgJIc)ol%GE_sIWR2Ts!F=@so?x(*qb`rE zyBAX+n3>Or&IdbsYMqBgc+Fovj6=OI*`)tEqNJ<9kR9%QPtKW-Suo z%}9 z31k53-b0e39b0pHebB3j_SmS5LmE}VQY#xw!k&awb&HRUJ2wN+rOy@nvffQGQg&1b zKtKW5fPOW0%&56mbC>9|G-0xoIHx(e|A~niEr2O=UYZ&=5puj@8atz=CWeVX8e?G3+y>Bn=Ux4(xGRNq5 zGvoDi-xA^=4{{{iwzn$4xQSwy&|Uk~9xS;`ed?{%%$h=t81!u69e2q5Vf z-$_XB+?T`R&F4yJtZI&0ot}BVIpP>jO;88~#kH$yx#+u0Fg?&=Znjv{U*{Hp9h%lo zDB?{$8aQg;+O~Rl$p5o<*}g*#mS_SkztoHMwzquZ$;sY7IsI+leeTPjV!Uv1U%xUKFkNu*;=%VNNMkvQ+xPZGth`%p^4z-X(W&_H^!48$BEC;sYcJ1y+o z0Yr1XiB=DdcWNLUTM7#9k_qF!vO zIQ~cVt6LrWr#08ND)*$^mO9+SlS8L?Ap=8rAQP*|#=*CRN+qROr8zzF;Z(Rr>-QD* zerV6Et5z4AC8qLpGI@8By7<-Z4LF9-_!oXa>4GZnbIordxc zOl{>wc?+P~BD;$JkFLC;W4kWocO16d^Kb12(jPuSfo~+Hy-5C%C*{4zeKA+ohuCBY zs)!fVJDrd8dk7K~<8lPDNt2^MejUZCsIR%}L;ph@#_u-z@-9L6UpF%IG9%!n;O>22 z8VkPrs`wxA@;k)+4+a!-Mad&VRfG=-BC`$Z{!&Fon6{fF3J-x(#u0i4g6DvLgrDB= zsu<4uMBafS5au10LjBLt|G@A+lnnE~>5}SyEnAk_pPHsP7Cwv4X>ju~G{OVs{kfR% zulT#zSlL*fUF8l47+Br$XAisD8^!Gh!UejjT0f0Aj0npj+W#T3%&(u`SabsP){L+= zLwA)w6l~tDF|&y{SYL8LfwPdn3oX4yB(&_V>t8#Mbt*@UKWWLPIC3~#PdJvfHvLBy zGRitn{v78izjY}iD`P)v@zVWnCZ@JCzn-TnkHQ< zZkuKje{VBq@S!7Uq`YzCp9MT8@{3d-=qwSj0Au#bJcr?D8tqY|8M~kT!d)(t9`&}U z-g3vBTQ?=$NLI(`8y^C9431rE(wAOpJ1KG>>Lgsf_+K_6C|;MlUY2i;w73^^=Y*@a zbEC%O=oU59y3Pt0JZ%(m(=RtCu9WYBuPuiQGUdxwB@@B+q_RGd40Mkti(i4G<&C-! zeMdcO30JcYp)RzB!D77k78Flp_c0EG}OCKXI(jp z^ez{ex{e_uzq=;)*m$R%!P#0AekzF=8Oos86{o$IvK&HZ{@txF%g&E;r<>|YjCjDh zyf6L`bD?q~_Lyh=D=N`nOu+XCG01gmFGU79MmDy!$AymM4&;!SqKB#vTU<#~ZfiIN zyjKojrCIF3V}=$`UaRbl)2Eqd4q@k?BfrNqMAD;YufTl1rQ^Vrc?LJUIX#D^n~_2) zA_wn`u1&qEKnKMubz)5|EmpkK*O_q&u7D-wb}F@shYGIlqya-?0J*B`soF*-dyEH) zwBc=4ZRPWX0=(~lA$w={=e&`};{eVR@8V5_v4D&med6IqF#2-bH1+z&*UPrD%_jK? z=77xbL#&$H?=`XIOym$q_utfX>AnJQCaxP z1;es*AL27?wcJ;-ut;;i_2kExa!%JVx(13tkGMJd6VH}Jk>ze!aa_cmT1+(l1pibTk4`s!A6tqcSk5d6DBAoM$z>uev|#LW55%M3zu@%ql~K# zt2Y^yXFg=bz&jla{&-uN>4?)5I1x3<*nDD?|CY_}8=IkyeG|K(Aie*~s8>Hnd~$(; z6$5w5?U=q@cWD%Datp(`iC2%XGlOdPR*K8ux_yRB<$JNe*k0yU|A6F|25johs0yN| zy?YVK)(Ltd-%_;6mnSYV!MNof+C9hb)M|gqxkU;M-jiKYaQxKNC`Sbj^BV!P?bX3& ziUzpr(rfn8^ss1y<(;9Xo`#SUkF!3IGKb&}$Q;1ZhU^CJz#h02ZB&+h88AO0>eL~I=y%hR z$OY!$-pKlUC)4?bWXiRbZ%bDXn@^0mX{2ED#VcMu3O>H%X6ZiWcO=9-mUB;qfIK2` zI_iiAxQ>}%0i2TxAsAN2l8jl()>^u%4YS*6SC2mn2Q2GHfImX@>5pfi0l2ewz#%K8 z%l+l0CHaj!D;d^sVQdC%Xr&Zej{9aY$y2S^LkR9J_yF(iG;=DhR^DhEQKkcHMugeM zwIPa9hWsfS2GGP0(9=74lQEpHdcj3SfOM0-oV?dZxQ|%T)?y~2TIC`*wC3K9U1mru z`dn4{Vc|flHV`4-5t}B1CKFqSyYcsQ$F}XS?G4on98x#I<6HdNn+Jm5xut3_=|@u8 z6L>x-EwxAU8I{>izTDhL$@sQSO-h{1kC0zU*l(`Zz>)`ckV3Q08#neHWf$oQDCbXA z-EW(Vj6%mBR9C!B25~PkBOV-$w@@617E?(n_+<-746XeDfXsrh^^p^8Zd zo{}oHAN>F?*)>mH^41YzM^!-Z>sB&6sK+H_gBR}vbJ`avH~mZT>)qSy`pmlT-Kqxx z0TCH+GtOqkbzn^=mJ-xsifm$2#641RJ8~K2uBYcAD(eU;*VsIu`(qYUT^-|jb!50BU|dH{FhE2j6~BXipT_a-Vg&`pETG1 zEGlw}e$KOI!}KjobTv_JBA^%E^e^_zkx4i_G#Y%um=YlJ;iWerW|mw zddx4dBhOp7pGwJMpI1HBs;-!xTlwjN?sR%p6&*}iyw!&^Zp7e1mQdnN*wHcj-K&wCf4y)hWTDm`a)vPn}7k4>J{^#T*0?@@v zT{5}&&v(k9<~~rTk_!6^xm=oqEm>$S^AkQcmGR@F%c?z(nq10acag+euu~D6x#t+C z>KdE6D*D1Us&0;Pw6NNJ87SD^o_Pd)+)QMlQd_N@{KP>|tgv&(*ilxPrZ^_sSO0L< zIJi#MTCRUoHLGRE5IDSRH_OVu=QI>c!xiv`i$E@|{M=ws|OXct)Nh$}{)o_3W zTRe_?t7Zrll+xz~Xx+Hv@DN>HD?FZkb-@+WQ=4rT?HS*v>PKQOUUks|_sg`CtF8*a zy-k^~)fUxr*TVk*HAG{4GF$*71y_4+UBUjf_*;8n@B1M=0CaKy5U;bn=Ff6n*=Ufy z6NdW!Ck6cvhok-nbN?qX{lCDut65$tHR^dVJVqlPpy5WSPUlx;=jLQs7)7eDGkdbW zMf|;Rz|KN)xwJ z3dYB3g-y{MBl&H)3}X=C+vVNL53Jo*y z)YL(A>Yh&ilvjK{-HfzPep}YCv=%V9L{K^vqZ7zHO$}Dm8d@xhZhFYNjdns*U%iQXc6!`BZcyU>;VaHXXdq2Mj(@ zgaVVHgIRi^yimxUc{to2b0u`H!*!DSrsKAk$ZW>%=bH##YRqMXHN6tRE&! zAFARMa&?{lTpD0x!&&21^jEq%z{ zdzVB;k*$7NUh;u_*cEHEAE8cCos?qyzWxsp_Ee^ej5`A_G?Im)y3(X121vlsIyzvO zDc^kVoo8>i!nM=Tt>5^g2beM9 zwhV;-{^XaTwZTOe>c{(%nX2D=e0LZ!c}*w6tQXR|n+DQUk@Zo*Ntpo=%=hQm6O~U6 z4v=5G1)KNVA1M>iKt#eAZ1#eCq4ExD6d>Yv5s(#X14LhvyaS-T8CHtKw8Z)1uJ_gKvqFFtwVYNQ(RRHyf(yilL%N6<H^=*R&<$S3d=mkb$a$-w#z(m z1mBxnb-iY;jfIcFllm(D@w}neb=-y=2HOUrF@4pIR^ptrtzJ#Q8%@v@KrKIB#q^q| zg;i@GRRvqnwEel%TD<&L^kHJ_z3^nT+p%YhiSWMDjMEAG`WG6Gw{c?7&Y72!P&Up< z+q4M6BgM9BY4p^`#f&Ct!cs)%z9qFp27Demd-qJPpgQf`@6T&2J>GmKfn;Jhb)@2{ z1t-?avhzU*0?K$4`ym!5|FRGN|Do((SbWbY9EwfPyFcg+-S4+Lb4@wE+_s_L&E?wX zZ<#jQDqZV4<&?YUG&N5e5oQ|vHz&b^04g9DWjcE7I6_$550gysVP9V+270qmFt>VY z-;uuk9ui!6&%Yf%H8((3-+a%R_@%bolQ1!-n1@G0J^$fxy|<-o10rV zcXNfHT7Iy-F?xCm)5uQ-cL5 zbYML=Fvrn_K6D4)rS!$i2@)8b+O|*xq2=FPdw)XvvLwZR?&4PFqN?vZdQ_j_=9V)z zliX?G%htO4^fS_s)+eJY(Jz9ehF;F-I{3zqc}dXtFRvT=%=4fzAB-&zFBVAK;FLCO zHE%SD%s#d_4lhL$pG;sjfv7D0cI6qLf~A~=--oV-(lqsGv_~>!yAmheMGA5)(7EbU z(#ZTNZ-D+=`%d@NQi!Z7QbS`LGhIo^VR*3{W(UNvyt;6{vayk)w-|pV)+&B$OIDeT z1qb%)l}Ihvr-=d3Bz9`rCV_(^o_!@m0+^@v?)m&}OiF(?{kzlAr`r92O5|3Qv6a8X zw@(pSw+cBR-p!b4FQ{hwvv4DV*MdpjjjPtmo3y0>59bH{R~?K*@eBlTz9c~o_NIR2 zU^Bms{e`!Gsm#ZUP6*mTPhEM)Y=u?%0@($@NysvqWu>f$5}rK!#TNDLQz^4|9B!ByxeQb_N~>8qL7~TPsYPW%bcHs zBXF16gX)?{(>`3I`AMBilnoHDG+CPXo(g#B6T~ARHBY+Kvw`*HZa^I<-t6O4LLsIQ z`h1z0w6bgD-JD(8PEB4*?B1x2V-T&(hV~(VnfudBUMZ7zkM|uBS1XpdRpnIkWM9QE ziAp!KW-MF7zdxg%+s4e7EJPGVGt||Gx$rEc*j>iI{vx(EDBp))jdGm1{@GVaO+{0~ z8f9IVW`TxEF0%eHv8U=7E*vXJW2=S}VbrUlKW=fz@6oOoA~e%&dA?TwF%Rb;_32%) zzIq`ASPTgZ0l3dxeI&WcSEP$3fk3YQm4-IOC*os!)|(ux`4II$KE_DN_ouEMl51Xo z8BW}s=(|w>t7j>~G|}>E8#tLenJjuT+%ZWZv+d+}fVTU7xTARWx20b4vX(fFcej?g zQW5OE-&BDUqs{B?t!4d@XWLSKeq@}Wy@Pttv^zHe!(wKJgrK-SyByO>Qng+a`4q~M zzPCyAe-aJsEHzg);?o%>L_xdq+iaJZT{QKFBLh+9^fi%rUNckG&|oud;TPeb@dPPZ z#CpRBU`|coristI`YS*g_J(wX;=M9#DWp{Sw6X>nmp%M(@t3Ak4;E-8SMHU;$q>#Vq zRTp{N`DX{`?6K$s!V&$L@dhXETqygVF)HYB)`mr6fsaQ&hCJR2|Du2?E9LyjIl%WY zzwccg#BcT%NEI0QU6WsPWPFu{=Moha|7|5vz|9WZN3Gw#i69?6$Gu+0{+K$fjCfJB z;?NV@5Jf9HLumitj!_dvB}!YKsyIvg7xfym@R?D_??5SOqMH1olmg`@7y$i!R}tCaWY0Xd9s) zf-A@UBY!3@YW>D&3yug_xnwgDm_iX)rP88Z2^5tV4P3-0QhUvNNC3u zmb9_kR0P}Tu6NEW?xTmL-bD5ui$`7+Sj;89%TO^r1NX-DMWnhaHGvBd%PYAetCLS5 zCnS}{>|M)SeB4a}4gS6l&zQGzkxYu=pEOlAL(#IgfXghvq2w@?R_n`2mm$0^G!>H~ zsM#i$`s71QftsqoMHkYucC~Uc0*>~fAW%Od$_lXFVbf?J@{}DpJ?+rC5;%*>tj+}4PMuG?Ex>pb`o`H`uBIoRj##hHXr^Wt__u8iCSXfS zErvw~#FJLUih{8w@mwtt<$KWB!xEmO|J`U+E#i@}`WvS4ZdKkd2G`X7F$5pHJMQ}r zqMHV?i}*PCET5!`EE6QvOU^j4TU=_<>%7I=`HSZgECwb8q}jC!)^O7C6t0Qx)qOs2 zf4#K1IC?nCfO)?ZskERJ^1x0d{e9E}2xYX@grvq!fsEi4w{bcpB1#GF3Bj=f2ln zeh{PAk#-m_Tjmom`#zgg?|P&De~UAQFu?ap$zOXreNIb$Kwp*Xn~?LlxsnA~?g;iL zDTrAxk^Q}-6KL6JpRAWEUELqL4^`OGfMPa^{C@s9y5K_qThB`QKK!Kvps}T zby#2(NrwKW`#o^|=-SoZsyAx+Nqy;w)en6Ki}#^0SH z5DgxMuhzvz)K$FY0OYtlNg}CE?fGjF;VM$@do>Ii;GTqOON%k5csk|@;>({kI=EYL z=UduqNJ2YGzWRNomnh(xI6(BB$-Y2$LR;DY`;|L6j!TahD1Pb})kv{0S(ZII^W!jM zM0v;9?A+AiE9w;%p1Q7ES)SE`@UAsKrSh}t!%0@$5Jmvo+c5;uh#Pz$hU3baf=#rs zJK@ChUU!26+x59NZ1;dh{H$*qVZkTZ9%?j;H4ce?qvE{BhdL}$5FK0V^tG8EI66f>S;v=eTKNFV>Z}Ot1e6%OYw@#C2*-DRgOhGZ(V-(3+H$t@nakoLTQo4yGeo*eF;N9ht-{&m-ko9J&5{vX*bHXYGLPpKPZ04IR8W3 zn;TIHlo2Q4T2)LgUe8VfNFp)~E=EGQwGmfO5YiEBVMhdicBtp@mJ9Z~t=FOafKtN0 zqC4@_a{0hE-++PK+an$K=TNH zix<79;W2--8NB@!R`pQO7#7BcHEmvPz^4{IV#1SjqwQR;n%OX9jO%qivEC0?zG?pt zYkwIPN7Q!f!oh54=NjCln0%Cm-;J`U^ZP*~3%ZV@Eqoer&OnrnT>-&-EUmGN^0U)LR;BTR36_9vM} z{9liMzFtqhJ{rC%_ILk{`g3V^z5r?Cz~3O*7tP3uX4mfMDi{pKCu11Z8!**GUE;^n z?1X;H>lS$BVdp69iiNnBy-s2;<>EAcV1tHT|7oxb-e}$v*xnPf+;BZ{WdAf-RSu(p z@nt`>|46XhY$KE7l*s=GMR3TB!$0A6cRYXwD>nyiBCIG;;EMhoh!2Ojk(ZW=iO9Ey ziO6N`n(ZegWGm*pA|L5-Y}^kh9Bx7%nSut)+lUk13o|}vE&LKkQu`1*(hqOtXTnN^ z2$KX+f5)y_LsiGP@Px{{IY}vXfm9^kk7 zB<)$i_9#QiGQNrnjH*3xY5BN5p&_NYC7k-QkrRa+w=3(iUR`15qCmgw{{3wJs;E7> z`$}9BAjAMO-45TIi@`O3qrvTRz`{|nNkb8q%K*40;991K=7aF1`K_gOt!{dZFRDXF zu)49#d)LoY^tX!h**;!9*PV%E*Tp5{PUSH7SqqEU*v`nN0^9pNuN4UOvMRbw9G z7xD|5s;W^)p4Ddp3~eXpyIhq!99L4xf|46mm1!TXMc(OEiu60OI z?94J~P82?wWuKngee{hx8jn`b*Zn+D$7d;9F2caS^6tWWAX)vl{%522SnJ0$7Xtnjy1 zN^yF|kaFnUFc$2B*NHY>QYKM9#Fy}O#dB?$J{W!FfD}LEBeX*0SdxA83FWaaWd`j^ zBaT_Md(3|`DZAj_eJ{q8)tdh){FliV;~w?%v>EdHWrE;yrbDM}y5^fYy(()?4whsyB6jr0W?(&d{+0kW<4eOC&nxj0q% zQ}BrZ-AQvY$UF}o;GUk_uvE>pobWAW$BYKohrb5i~NC1`p zxRBk&bS&8pF25jb_g1A!W%j?-b~FI zrj~N?Fi>`WFNFu3H4=ihm?O<4yixp09*y%>kpB8Rj1K=o-v&#vU>87B5-lKj2fo*yei2F@(iqy+agR*!#JuA3DK}vk;6EmP!3ifT&k{TP`oGnj z8qRYsbd$*dg)9^!Kn&N`{gpdC!GPHG?T{(JNg&h4S6AHN7co)$(-1!w*S_1#{2HbJ z*gdjVs_gH%c*42@Xr#TOSLPEyv$q8ibo*Av-Uw3M zYT$zQqw=DOjS50X-b9*jbo22ZZgTE9=8ahjvcz^LXI?81%w^JBqe_8E=m@21ck;Vl zht~TUNa+C~dh77rodcC|#FiDyA~o?(h3`1I_pk3u5I!|wZu;>HU&<4YdT2fm{3>(9 z%>$V>5m9igwG72TwjH*N&%sK+AQ%ANVST2eBwRRJZ%&p8z7=!PR}y8y8VG(6eI%75 zbTG@NclOhePYm;1kL~MX@p_oM!tr=&n7$LF_P5z^mmLR|x!`i${q+_n<*m&=GXex- zE}~|2MES+WuyP?l<{9^wbffYMv}LNTwulIQQ?2*@zD@|Og;c6exGXKpaM70)o$Xuo zd5NgXl76Jh^)2@df6|*@uoeE`99RDJuN}{Q!G|a*PPj47h)+{~U&cnW~ z%`X?du2$sVM~$|fydqfhI!|UBuy7TvaF8ON%)RcD6Yfgx zk~e!+yUDVfW$Q&BJK^EB$@||8RD%3RoyP1LeuJjja;xQDr>HJ4RqoxE^R(&kSCy1*Uko@3y&a{u^6j`*J^Fzv0a6 zQ*0c!cOm|(X0gDe+_dpxcAN=S;NX~25)GbT=N-K!`_?9=mh_ahm4*n&Bts7FBefq< z;sDS8CPXwE24{FI7*mn#)zp0>%{)I!HR?(#n^~sJjnc-_wv(Ud+-`r0WzYLx zILIy(aPn9^Cx26-n|?zl*DpSS7lL#;;p$SklS>y&ezfW%#`>g~fTXe$Y50psM84xA z?9j{*^-<1uU(tFuStraRwLqE&b-6&j%G$$Zcs}D zZ;Pf8Pg>)9BAFgw_oHTXXh&h?9!A&>8U)?uaDLLmu`u_;mB_5Px0f0@7W3GW*|z&k$!5()P9^RPk1NGcY;OVrN{DJkMI1qP5TD!w_= zsdJl3UFk@ogQ{8rvzy5tg1`TSI99% zevKdg>4h!*dFmF;FIMf2i#Xm~qd`uoL>rEet-fWKw(OXSyF`BK7sqN?(vNwkzR)&4J zApNF5NWT*&+K#JwyhU?N)B+@0=_S}@n0Ze5HS;fjrK_p-#B0LOIRA2+hot)#BnyHu zpXg3)C*~@y26PB~*@`@6!Yy?Yl=WVe1PKcqKGKR792_`MrCyet3+`2mh~``V#uB+=_&{)I zj)+5y1hWh2Fzi?$$DBW@x+?>y{w54iPhk6}oL-EgvST)DWctKs(+hzSMiwD;!dNxi z+}GD{cYQp_;N=&b)9*evb&Fme|Jo53mT$hPfAaKqO?VKNAnx*>)yf{z$t5oQSKR-R zt?g~rYdWV>Q`UQhkI&I=<5Bn@g_utWvfmc`H^>zFzl{cU-ugE&#W!HL^fL!GGFAby z(I<4m!>6{xU)yuE_KNrZRpnM>nQI!VSj!O22gKImtktnh+b=2Vv4dkUm%Lcm3_TX9 zi3$3<9}5#6mrhi{NDq-oyoj_X3siF>A}B8n0(Q+mJI72U&?%70u#4jvehw3d|H}G+ zIz}^e<>YT~VzFB8G5zJ+u6xyE7k0Hr8S*%b_k3$>0<)K6#aUcl#>e1I_Wo zlA$c@hyj+rR-ia7a9kdicg*dO-K=Q>Tcf;Sw`^JQg!bA0u#YG5^@G{@?YB5^ji+yxM*oGRf4ZW*A(oEz^u=CO3A3GDw z<0!^#xf&_{4~0InBPT&*ID;6J&wD;B+ED(js{Vhq55hBccNJml$PMOE7!*+=yw~j% zQn{Jw_$(@=z{*ssS@K)fq7;R?*!Jc!c;js`qPgot`Q_#R9RVyh%QQy#KK34KDWoZe ztAA3N^c#?Yrg)Ug_2u4|84L@VY;KN^3CDjO`+&v+M1hC_yJ=O^F)Q7D)Tj&;tAzlG z3@u?PRly)Cb%1LF!!5nvwbyz1^k6vqd_!fAZ{gq8DIro9z`U=TmIYTP$~^?puocCB z(G6b|59uC0*<|5=ravJ>G)AJ}wQGnglljBsn{(M`A>r|GB&LcwaM5@MIc22N_r|@e z_k-UoBHM*S^~Ui7c6XWW6d#ED{_tU@P2_$JrWw+dd@i-})@|)ME8nsNzeM(Y-)p|~ zzSds(mi43M_wYlWew>$yP_Hwv2@%zzM%$KR*I6UAqndhK4y*eTD31Ay@FwP)f_#a2 zj>g=ix6exLMecOAoa~=jrX#u(>+WKjS622L;M%p`?>RjDT;@ z0ncFn%wK19fLR5j+WGamXl2?YV!1d^KXnCvyDLKSBxSO&ssNgX?t*4$EEJ4ogxvVf zH}CWq>tv$XeUzM8@~9M1|A_Am9ft1PWXRN*2Sbi}2Ou{Zn0sIOdZ_ zeJK3bA+)VU(0}GTHn^Aq$@m%$w34)|hMPigPF4Hvqb(E)0ma7|;*&371hblYWlyg^ zfBkV81GmsdohRk5UC1`*A;N<0?3<{i=&i71`y*Vx0hKzr6qtW(cUYM_6~;8$vtv1* z<-tVnS$Pkjj{ z+QNp*2}r9}7ip~TNv-VKML%Z{l${9p?Ch;=Z1=6^WbfVAVcV@BC^d@vC*09uoJ+0d3vKx1~=4EFTuWAH2kg z8Nt-QYYr{eN$l!6Z=U>a%vBqdY1P2@_0QFuCy z9wE|lwLoEmukuBLU0JJN>^f=>8vEHq*K$auy5q{2h$&UtN|KIr2t_j&PiMQV`Aicgniw4 zegPD}6I@c>Dr4?FPmewwcWW;hFYkkWUu%S*keSWE8uNIAx_oz@ z4*R*_Mg1aYSql{h2GWZC_jW_=MU%@cxcHs7MZRAmU$U}~8oBrcr#p@Wr}{YGqrOLh zOwD&=V_^{Q(we&GNnO7fObU-GhoY1>+d8PdEKTC&)2_m6Zx`BVDTlsdn&x!i38}Jh z_U?m`7mDjf8?&T_6W{W0*Va5iN{Fdb@3z798a1hMx%4(U+mA{^QmmLeIit5}Sy zNf=Q_ylOt}|keTne*xAR^+*|y)pZvw)3eEh433l#kO5Ptg4tw>) zj|TwY%Tsed!$uukgAc0p=K}~yFU$z#mB!$G{6%B>O<{5D@XDiY(sIUMFB`vy)Us^{ z-wW~?rr^O#hf>%RT`->bkw-n2KF)G(9Erb!)9Cc$pm43gvE}P^8%=6buUPdRJf^2! z;`!}+@)3_gpw*b5G88-g*P%6M%Idp2_O~Z(2wd!I@1fv&k+@zy&O0F(aS+K2+h?ta z6_o5`4Js(Q>obAH!L*Z`5FS_J!Kg=qO;IU@YgizrWQ;)Ljp!Bi`Mtw?g%j%_@xB_` zQKjdKk^V5fK${?}VF5u4@d3dV9RJ`+S|A49s>Alz>W^3OvhGkO4hd*^N9zQwb>w_} zGFeN3Ng!VFB~!&R6wrUBr{essaxUPCE9_q6+4-VfVkyB#dp>kDFW>Mis5D>;Q6xtGIPJ2bJt!xbS&rH6IKRrR&WgrdlV-Td;wm|Hj*ys+b0FCI9qXhDW?# zKhS>14^Gt~vddC`7mG8E@}jO@i4Wokd;}5^Zbx>^cMmqDPh16@vvnFOG@tsM z>tU(CJ~H7vYU#k0R`o}ozk=BZDby_`#13jww$Nv zbW`T2nb3TxoC8b20mYmIwCN$y#{N-WJG`Q*)|l|^COvj_r;1(R=@vo7OD!pE!s$HT zZQSgEKc+g)zPhUMjCVh(+Wi8!pj(-94-2}7`!;-O`s+C0*&xe5PSvy?($qR1!5u8* z&1H0QaHqsg{4h!Vsk+mouB1Qn+yL{1bm#}iLcF)Ygo8aNa-b-C>L;{?J*ctb{pxL1 zcF~R-p1T;M-LIvRqzHSHh_^(y&*Uythy84Gk|6=xPYazV8-F~*GPBlcxFdo!=C`wv zCKNoRNv$D9-O>-trz4TNBTo6J_$(+!Gv7z`q4b|7G zK}Di?q}OIgRfl-J$ z;l|N|HD33K1Slwiu z5rVABL3tYz?4d2Mv%E(LcLH!njs9xB3ES5a4ruoLV1abWWvVwSmh6HaXIwdQu+ZpH ziFv~~HThVmdrT>)u`l6rj+i0p26On_hLpL{(r65aKp(B9c^cbb`lzJjsAKNhl` zKEk+J;NUq*-&uC=DD*VHkAIDc!kOe~yu2i$iN;AE7VCw2=QExjNz1hY+P-}sh1(*B z+lFPI9&QfG+!U^19}-JA9DT~5E=1?AN|G*Y^7WE&Pd$Nnv5(rSQq_J|@UrB+PrOFi z6qL^W!nkzdDu9TeZ#}<%HVDGcn%2JlIrVSdPW7Icjx51zX#COmQE~V;&w)65rZkmm zy^!L7>`>pOI7Put1Tu2`TstM*eKwFPH`<-9Z1Pz;K0mrJOFW!fw<0;yTkgA~o#J!7 z08!?7#}C1~i5PH;5EvqRQKN}>$m@5mLL{gv2X zfQ;;;6zz=}(z|WtZq?e>L%vfQ^_Kwuv_NqFy6}D<)|2R)4JjZ zD{SV!)F6>XjU_sm6=9vfIbxJWt1k+hyN%ru`Zr#vKMsDw6W;_9Hyp6ylh_>Jl(~Oo zgA}A6Al(2Z_jKC)hhk=VPd+}rfxU%UTg0)@^+7?Y=%(_z@`J^d)q%P`8GsvfrwX)mQCV-6G zCl$i0>3@X*>zVKi(+p83A2Ehk?RWH?DlMdhhuADnDJZ7?p+~<3XWc*e%5O&j!H(qV&g|O ztJddDA=;pNJ79|I=j7tO4{q{KPQ)@0SA277yOzGM&`vAE-(Zp~BX(acu~ZRVMN#;% zAGPTtExY@-m5{RBN;D)`46vtb?eBokUX#m|s*dsgP zQf+yJo_RP8+JPR%juC|?hr3F>QNZqaQu~KSRHA1Sj)KU?koP1YXerfyX9Eqa*@lE^ zAZDw{aMm6>C(`s4A&A~uTiv2ub46nAPd$-AUR7cu&=>?<>Ja#Ey5{E!OFtpyU zP6ud6zyj(HGmmYs{Kd`HGI7#0YimXMaDEXjc^HkWfrnD5gcT~LMUvX*!6NZ*I;Dpg z!h8ZQ#ax*~N0)j6-5&>X-=hVVTYWK|tdX7ooSPPZMPj=2F%JkYeb`ZRd_G2{0buoPuWeTGyn5?tyfHeBxxZIE*9LQM6 zh2;xSkPr)m>EfXJnrQog3h;-N5!qgR@>u}uOcTRYbl|zvEs-tLoVBR$p7=qCX20b^ z6LVQbFZtJy;n4cgc$pFr9@8SyjK9WIR*}n=mRCn$LIM*D^W8C5fN~$Eede~)-EF)O zxgwUf`GhVYc`4aNTOY>&Lve~s`@;UsI-kYtPCm9u|4x}0ByJ=smntHqD2n(mY2)K; zTE-bds@xfm1&svwqwKh}`}uuXo;+}>kmh%u_`=87FS4AhgI`o3^ZGs3d#*OACyt&( z8owFFU>YEaLP5DFuR3wusI=;{XzORy5H6x5ZnDtd57A|W7@tTdMf2~AJ3>`BEa z=EF-QXhg=JVp7w+O^RXfoIOpUUAT#k@Vl;Kh!F;4B?#JK{w7{w@kIi2nb~LqDKSe- z%}g47M#T&~nf$^13rL7Lt2==Z@JZ^ht??Se6BWhrh0mZp$hqj3S_(8}t|UtNLuh#0 z=twjm$HCmA#{F$%*wt_MdQcE(*C+%USC0`V1j%HgSK?34%!&`O3rtkdr0D6$TQKI4 zp{EKkSVsZ2wggPz{%tY`^?yi};d6EM4M{7J240P}Nmk|j6pysR>qe3I_dEqD$ev+| zxO5F3c(Rk~W*{R-NO<6k!FgCK#C{EQehPioh6@7)_8cmCQ03 zANA}mKk`HkA#6-ea$?}eV_qV@WVb~@AwgkMlH03Gum1X`LiaGSLp#dIpM$|%R2i#X z!Hog$K>QLXg*D~T%-q^QNz#j>sC_S7@}I>e!}-;;fu8h><(O~r97(e{Cc=B;wAjU6 z1@A%C#;1&jq!ySf!WWThoUCe%3~46lyb?vzaW5O;eMKFjc06MtBrc7Aj_2B+w0snntvtF^T5sbV&f4Wbw0 z5=4{{M`2L0ur(cbmIAZ4W)^$E{fL4Ot8jyx%U(Yr@2Nm!O@LET>9I>4DL-_m+IAyH z4MgG-7#KmB60Z~E_0x<>+-^u=ul`h#m_axMOIM5@8ATIy;~ZKMbHaLRc5h0@L67); z-IILVyPiKU3LB1-U;&5 zD!FxsY46!yJl~11To+OwtVNeGc$r5q61V+U;J*PM-zesE@2S2nYPqqXxUFEF`a*b4 zXaIR0jVUiQ%>SuF|37+H{@eF@OWSzUtN$I>D)|3t#s&oGGN;FRBf2oSQg`IJX6{{Q zLuGDegUyFuO@Qjb&c-=AHnK31Z&?~9kSvXDWV3~B9BwtR@BF~K3&?yU0GTvz!A~A_ z(3Uzojp|#o;PkPSge7K3fetsted2xo& zKr+QWHVJ5{v=8nSswYM!l*<}$4fpd-LV-cMpkYH8p7+QqLuzQYO`Wr5?DN`L`*s^HKz|Duux7X+p(wD@TVd&<5{ zFUpJe**Ux)fRB5wfMTDTO^ADagFj&8a&|m*=}vrYuI!F|>ly33DV*97_u^fBw(cr5 z(rtw{yD0fb$z6SDX@A|jgqATanvz|Z!6z%l`J{RJMSr${uq*Vvgy*FR640w)WR>Tz z6V7L?rg7#2N#^4Mw%Psuz?c6W4pCLv=PS3$=nLaal-kk89zaadx6f;Kmt3RtiwwpvNo)*t&uxZx8M*=W*|-gz=y5eh`YR+K}BhLsa!SyEy)iA7Zb(*tkUB zKjUrUd3Smo<=yTt%v{VBW!>V^b;cPSsTXl&AfA?M5hlAA`L$Tz@98~L)FZbC?B%$r zccHQ2je$KBv!V(-l5scUv1^7Y| zaoQC)++J0vcg!&kh5xRT1V3H7&u7De2=M%~^3yp|Bl7vb3;6Hwd-531k ziQug}JyMAgu8ent;q;uC_sLwsjDA=#jphh<2Qkm`5GozE>E5nClf|fY zQuuZwbM>qSk?9VMRgbfHua%*!&m_8OXovc2EB%c;=bKw&I_Y0XLkT3LAzZw(KB|?t z;lVwAB|}!@-PRN z9`Zhsoja0%`&Op>t4n7FdkXb4Ht+J}#Kgw@dti*rwej^#00sDEy=N_Q-L1z?f4PVA zJ(v0r@U?*!pdF5Jo%A^?hTp)iW{m}w9gI;ZN){wtrcKGBHqEVCTktx9K}5_RqV(1aF)6P4$aB=lp5)1X`Qkyh2%LIbj+0rC4uDPam9 zg*|tD#CIaNQ9J^^ROIzO5U7<=-t`o{$k*U{+vX%oU5mp}X(ebUTwO0CSW&y)YTV4-%Xrldk&^TzJMr=%~< zu&pkuK0aFfvN+P1nM#B+FM-?nJjISck13ue!{+*#O zzEtA$kCCifACGAk7P$-03XFvwNs3(3Q&vkj7mZwZjGRmMSywYD?S867$mbKra6ci| z3$1-x9Ti&w&aET$a+n+E+5KM8`;rpE3`sQLu0EowP}6{tx~7(buw47WQZ|i_Nt%(R zeV!>`I}ZgIF4`b(n?fwd3l|(eIvEmduxo z-*O62g#Ho9k!eV-B=nzZs=CvIW*q)o+58`n$N$}f@`hu(`iSw4=yx=N<=br27I&Gs zx?ASHBsM=p3FG4UXz~3vV0*oZLC!&_$WWEqPOv$wUpT=5DZ9i9azzv=Qx<~ zKvl}mm^??<)E`qO%-87@vqQh3Gh>(B`sx(+7QgLheeT>2c5Ji46*B4Xf%6* zEWH%&iOCh>^qCV5GE&qOv=+O+Kh+R6EFV)hT%A2tB(!FZs&m1CcqEq0y||O)UCPy* zstxV9EO!5NP-P)@_Y3)C*{lH8lFdbBO1NGT#Qc^Tq+)pTKEb>V*lwXF!C|meCy=xV zl4Edyc&fQVhOT->8v1I-?ti$E*I%&9UgU@l+{vnx?Hgu)m|<4Ee~&vA#hK>7j@_I7 zB6^$khP`76BB~c43o)HI(vn6m==;cm2ITiQhUvd~qzKRZ4BDr$SU60|foGwCpIAZtMNrFU0fPe1ne zL>B2rqs>9vh+@JnvA9FL84E7xq*BA*O^A%%__(hk-Wd*nEJTNka2Ad-U4 zA)`2|sMvmxi^;`>wQd3!VcR}G$92huNm!_(N9ZmlX9)C4aE6z! zQ=r>h@f`ImpsLd*l}3K5dsLq-=VNU>=2YCIykLnoEN4N0%GvMUmD0b1UkdS-itZKV zKNU+kg_N$U_WY1v{Br>X0bL6!=*iLJWeqa#rx)Oa>5BOpt@ zzCDTihYk}!O@^JsckXR`gLl{VkyCS)T(xSl;+#Q!nz6E5nXXsDrYy^P1dwYhs(M;Z zMy+au`G#}uL;ggZ-4A%%SB8Cu*?x-AJE3{Ig~=m8;_^h1L5{W-R*3q8j*`1L-$sLp zPzlt*p)_Sz`NB|zYGE1GG>-7yYjKy#g=|0I0sgf}W8bo#&hQwH{M~pDW0Mg1B!Vkv zMa5G4X3C&|W+N8g%uMqwSxIr8q{enGV8Qlw=u!5SkLn@1$SgJT2NQbG2jj0!XLcdRn!)eP7GVoBE zXWwVaZgAA)W6VzSr$2u^*+*1ZL$4w>MKQWXH9o)gls3E--(lu9na_PAj zf>=|2N6$Lm#`V8Xji~`L{}n{w7o}J;pDL!c<6+CC06#*UBER0J+sEmJSErc!Z;Tg{Y z*RV(CE<*a=6%heAi}YY;azGjqPi7drLGxKbl0)%{P*hJ?Gd1Gwf}TTfJiHQOk-9-W zk=TPU(}Kb{eTg*c1<`Z}K<7ZRISr?{+iqhIsw|8H4K8d#; zJM_PUi?-h+#{a{i0z30m`w<>8#(eMIFw%h1jxGI4`seRg5DZoRze%M3tMy`&CF)$b zwdqcLQr)Av9yotCCJl+Ze@jpGEI4TOsoLLMVWOD%mCO<+%M-&V6z&4&xK$fVfl!D=y`snn z;%SGAcMr{R$fqnL@CsWo$xVaFbdn^jWMl4jUX~a@Hy)fiy5Qn4=i!^dhWdAM&Ab3~ z&QVJCI0F&!hFE79Q+p0!0mC1f5bPm_*w&a8fT898g&pQT5;>f{yBEBjpB#e%j9G2> zy1^496}wb2(`Rvqj?VP%FpL?5TRV*tI`nu0y@CR5oh{NhKfE`#xH%IuS9DIxpb6V8 zfaeO<%zHO>zd?wAXdq`bNY)7oF3qU8>=Y)m@cIbu;Cj9g;lRs4f`{RsgAUBm<7Z_Z zqxGjJ1PBf~3($O?hWy&V$V`6gg4kxkF{8f1j91~l5Qb?165Onp2BnOMDLqf@8XD4He zdFMJF(G}{M{wzJE%2cS|q(8j48i>+Qr?FA+v2@6P)rYDG^`6B=(1Va@Xds4;ok+aG zW-B@#?N|NIlHJeeOIIQq>1t}5Dw}(|Yl-z1Ep||VtrjaGpY|*E22aJ;*R|D5Vb0X! zXd&0OiAU>E{<4W@7?s=o`yI8Cilr0HTSxR2uhTkEb9;vs>9t$J8Du8&k{= zW=fyQ-b2X*yu&9m!hHV$g^UaeGdW?hB}}kdkjm(LyRG}7F7-+04d~{@@5bGCe({K~ zEH-krRGgy1UMBaePoYwFzvJE#yMvbOb#ND3xQTpixj^}KZckb_ah% zV*3*Ro21pmmho)bG9%&#_ZVR|GK`;pfCIF{mrmbC^87C*wA;9_#UUlIPhCIxLut^C zkNx++;u^YibU55>`|+gdY|H?xp^()4qD0jBuBkxLvkGsGL5!<7seKjjwk%c*Yt_lE zxLCBJa!f0JW=5pg^s0`IjxgINIE>oPdoN2%%kE>};L^^f4nS@1(|7^Ch%ib24?Jus z^y=8`E4kyn#5(OADXCIGt1MsAkN(gPIH&=WL|A{@W|{-#5Sg-A%2*2;)mh_O{hv}~ zQ#H=^(W1J1r#lWw{qt2w@OQO9j~t|{iq9NaV%benKXz*1`aHIO2a=nuVp9Q zs`^boog#a!=tT=80w$?=7AT8%5UpcE6-^zISP zI1z-Rv{r3FBsA7gBIT*jPa5yL<++}I#=mW%TeuYpbpFzK=WM#R(Y^8IzI`~7>5*EK z@oA~k%woLA;Y@}Oi5Ht`g$2tQ8O+FHTfbzIVN*Gdar(#&ZnmzJy=-5_2T&S`k2-`T zML7H&nroDZNe2!v2n8$w&s%p0}Z zsbWs$_VVuN*!sF1)>Rn213F{EHHl?rrbAT-^m2>LJp%yc4N=9*K}0cG(O!c=)J*C% z3c4{P*l5c%4Cp}|mXLT5An@UQq&IiHK`p@CjMj_|jm-@RrHJxC0e*H+iUbvyzvfZrpDbbo-){={hQz+6-hYys2^Dr}OpF>XIic3pf zNePWGA9nlty1sne78s z#GAICYq$96a*YCAk6$LhZk6Tl-l;Y1?EfHX7(8C30L1p6NjTwfeR$*(-b3I{FZhHs zcC^!U;|iO8F{KkNqU%qpm9oB0#;MlgKCii}uD+|Oj;*12J65N*qQ}lPtNyF6q$CtL zh84{gz~6E(gR7yQt`XQbyOMU}rQu~Ld`SThU}Nr;W(Dvz z(?Y3&vM9hVQmv6|Ud28|4k zt9%=0k0AeunDfk2;t&cNJq~lmIE0?i#pOH=r0*yW%gKpb(fbpDd$I|0ZLWcJ&i+$P$ueZaldB2T0G-0uP z-(WO2X>0x7*yy$m7q(ki&R6-(kFB}n6BN)RL6ktW;76UzXAb$Hkp@{0hgoaE;`P^> zo31!mns}uf6BWP9Gn$~?FG4<>-g+41fNnaxkD633+PF8YHOgtk=k0R?hDn?3YyD+6 zrFtiBHtQQC6}%yXreiJNg{*A~8o8XFgP{!z{0(%I{TX?+t5rVnfMMAyd%}u0znll8 zoT~Iu&@4riMH)3@+PV};5;Kxuc(xR*b;T$s?5YrBFCicm42@=Si(F>2`%$mL_Mt0& zF#362WjkLMxqITD_mI-Jk6zet%nqOq-+RZ5et?+ldbD-4Lty;XwYDSy0T|GIG0@yv zHwG&SSx?5Ur^*6kS*}wDdwHTeppt(&i6=n+%t2MQsm{)4T0=7OB?B<|`)&}5162&kgFY`Ob;uV154 zlQWdJwYGK@kUZrIcp2+^!8BZq35_fC*EDvf^Y>uD0$saxVL{8DTI2xUuWW#ZcL2xM zCQ#b%-|%FpoY%b!6i3R-Zoa#YR=>MZwAB}&tz1Wgs)Q6g@h~SLKV?*ti4mN#7nSwc z*e`4Dp)hv;5`f&6?-+%qi7_``)1NJP>yZCxQ4$3h7@inP^W9B*BEVFtKfF{l=g8=o zzhBY(+$`zRyjpVl7dEn&a6#ovUA1TnFY-2H?r#{>dw+7;eIVlYCo$EjvQ|X=GID{8 z1Pwh4=%UfNlJdgv7J|nq7b1%^Yc3;)FEOo_C}Y5{xZ{D8>Uf~dYY}i`Ek{AvmKc^U zSo-9ax6IN#P_5NjSyT9XP+qr72rhp^l-z&;EdZmBFpNX$S1|@X)EG1=f0`k^{0p(i z9CFN2;-IyuMYdDnNNDi0wCP7r;esOP|6c%)DR9=bNNheKA!rVA6Qk8mE?n+HV)OF; z@du0r^me5cxha)gJ23_{v2E+&5bc`Ti;~&Yw1bryp6^Y)aSDyWpE`sSQ@GBm&XvTV z$+VHz7W)H4#$1o+@VpNh*Gk6SA)ZM*Xc9h6jA@W3&zTqs1>+9S<4hmH(O_HQqRurU*2n>qd}m6PmRTd7;r4 zr#|bj8eMY~`zG4%CkD;?UG|Z&j>_w$wJ)(hRI*$sHcjcZmhO?Rimb<7e$O_c$@nzG z5z6gIxiv{>LYJ2EP)$o)OIurW^&M=`e0KR+0A2gC?HtnKv%1llnMv!DqC4#~o{h1} z1qGLz03T-A7%0YHD`4Ykb^Xos-$&@WzEEnoLk;H5wKd$M2!JmqKJP&f`fH z_1W&RS%=+LUz`tfS~Lj@e{c#&6q;O6_GH3B^E9TpMK>ne z{)~ravlh>@e{vkTLD5(eU& z*gtI3HB>ny6pocJp5VjbA5UdLcUS_uFrzq~sAZRB(pv_o=NiG2=sXd2Yz#-8wYAw%V$y zuCXDndlnFI3=C;Y$>Ds0(4?UD*yel@@=mYL^k_|%SkUwiRg{(%b{RbDlXepvaTn_2 z56@}8=SV%UDC@g6S(pmTMT=4w_18*DfV53bB(k`j!_6&2lST~n+oL{GW0>Jg$A?Gi z+0{khS2?=j8>{4eLv#pW6qma()pCfFv<%IjtC^V@iN)>vjvr(EX6I{IU*1^bRc^V$ z6)p6FA>`>hUbaHcVjtu?QW<9%nx3YC!mLYGD6-Z9%Y5w_D7oDL&j5IJ=ki7euG~WN3=bo|oP?!r5f# zLnI(o&W9%H(}YvcdFvTJNCk>UAEeN}!Jz|%A+t`(2I-8O29ycEy;^oRU&G3sOQ zeM}{;dfL@dRoE5Z(k#?lXd3o_I#Y92;^k87s|KC|Xf`e<_C*i{P2L(KVn8i5JZEo@ zl)!5PZ&p`duWq~vuv`wf-5YM#Mu5qmN+0m7t$IA}P@>-;BYcE>Yb(nhzu>tEde>a5 zYi@5yYIq*__sWVZwAIJm?}oW~68<7E z1WRA@@YnYHVY}RZ|Bf<=IZFdq8r-B8d*YfeIA#|Y7Z$eA>YxWU)*ad*BRtSKdvM1e zZhk1x4DIZD8}It0$7K)gctK@o-462E^d^`X7P>17IVH*+sVONbF<7?o872P+Uh^K6 zT5`mGt;kIyLeB^i(IU405$Epja)fe6c^bq>$AHtdK-gdB{F>A9n+@ECg#50>#f6m>xE3n(i&aTy zmp_q|q51Peb9qu*R#vJVG>FWeCo~-9Px4GPUgfT7E<>ARqJ4~%eQxmybg|hdrd;W{ zd;X&OKai`b;o@_*IS-UeFNaPTn!6KHf>-*_ChoF03(>dHkh^R{{PugPpYj&23%?ZD z)&|4E%{7*@RMdtkpj$HbSuLS=3C(%)ql}w3bDFfG zJGaN1$mSC*w9trm@a-I)vgsO5s`uoXUPEYFf!3+aZvK)?{w{O8as`AX(hEP|q{3_z z6&L3h6g*l8@xFIV7@E5iQX-+9#@_`r@27nHQF7t#K@)!T`Inp?W-}r1`$O_|i+$EU zZmutev4DhIM(tK#8FTi7;>d6F;rEen^Axnb$QSYob{U!kG-sNxmo{&{+u`}piy@tz zx64sNW}t`xxM3;)kN7Q{mxDP-x(zEht}^-Hkzg>u949~i5ntTS%?FEEtu}aJHn7mD zD7Dl{Li{FrRE$-qy6#l9`f8YUXOpL zrAYNv&{50TR+T-1wmylVZ9devZnDH(=eJF0{&JfKZ!Q1Lxvs+U%KUPa7;c$dNpG$^ zx4GC=+SKJ;w>8z_k0xtDHJHtY=^dNQ73G!89!O%)9BF@8e6{%A^?Ubj+`ISG*o&b_ zekjQ|1Eq+`q+d7U?SzMjjgi9PbqLKQ-IR%m579EYMsGCtx+(h`dYqS3(fblYcC=EZ zP}Pp%xEJ2X>0jntgC*5T;@!%sy}@3fidS{xQ&vKUB7hwvi)CSxUw4k3S7D zovctkTiLS43Ogs^7t9hIp~H}EG{oWFMM=XL(<>S}Hj#|Q_$#Bg3C&+_^Wd%JA6gk2 zv>J^1TEIl(NWX2wKyR)*=e0kh$g63eup5o0eh+7}VO-p@1zh-aHI}70{=(eR-Phjz zybcV{AN2M}K$A5CB|q%pCf?}9`nm5|p?!6e+28|NnpAvg09xI*B6|jwp>EZB*IR#&#)mn zT2P1%n9l~a^)f1AS(knb)Hoqh*M`F)8RInTddLtDA5?ubS(|bB9zrvw%3c+l?Cha{Lm|> zWx-)`&I~xF4AU=qCPsB*)()Gct+}Br91e+En$fs>aM0;}3tDFP@3iVcd>r{S6@NZm z1^0ZTqhG8>!kd#dP>oNwQu%m?4xs=Q8jq#<Xy zaCf=bW-1@hvFC98$#OTC&GYGs9T^W&yPrIU0qIoTt{813sux^CVo$|{|5Z^|Y8>^dKsK5G&( zEt%r*8wj;UqK$kfbuN3{jhe|RUF1ze{vd57I%f;e#4kC;5eId@4vh!-ZwQwR#Ker7 zpB0)Pf~5(ei7d_NPN4}UFx!r_<-#&wCE`I-amo>-Y>KNbZGb5!+83QI{{Y&e)fMBh zxi~acc|K`X49qq_^Q~fJr1~(R6h4T9YV^59^#3o}16=lDXyRxPH7(5z4fR0ktDo4G zy%bFpXQiPDY{S=59W|JbSh+llyoYr`x?A?97PhoJp$cjr^ocW_V@K&dJCX8cbtrN`R#vEPJwKTU7(&lhSq&i1HXSh7yYmFXM+2lB}4Pq1r){S%M3V z^z_U5Wii`UNE3nmvdTCF8RHAby!^J}MMBWT!*j){d4B2mxT<40A~`%)C?vUwIsr%2 zxQp=Qn}Vp?cey*kW-@f!2kXpDvvfg8Fy;B>y`UuMQb-J%7`u#Vk1kgn$nM$7V<6r+ zf`V3OXPrLDvy2Cp_7!mK^gpF{%0QH%`HMkwhi0bRR`O}`MU7!-e%Xmf=pU!l1_hQT zo~dB9TA|EsG0x78-cS9rf*v>nX-h|w+9X2{2aDxkqMI%aCmJbu~crc3vM zQuIl&>`mGsi~JIJK>9ERZux#V`|;S+q}9}3RMh4cYvxFG=GBU}vDum4>I~%e9pR;! zfM&H~fBHlF!aPm`3{Q8g7XyE2T$TJg)>d^JlBk{SZ}*K&&Q6W$8j6#!k3#yX5bYd3 z^rsrWPQEzqlY9X;L2oP?g%G2e8s<&2+wQ+D9+#o{K|?e4lf*2R6nlDnVHA-nW94wbJi&Z=6#Z4Y_*C;3D2eK?;Q)?*y<|m98sU9)bN~H0{l5)cj4{4^xL;D-7aXc znzwS{pwnS?I(MfUmZqXR8r^O}lU{VmiQ+3Zy&m+smY0?n=I34B#HZkW?hUtl)$NP* zxO0)c^=bVuOX2DlLPN&wT6McOf}F=O!fkJu3X4Sb4``!n)#dgE`J>1U7tF`I19O0= zaM1mFb@lazcQeA%d9DHn-fXOcpNF|GV#8a|y&Eo6vACKq%;EXvPq3qzy` zDrE9WuWWS2Nk7RFKU}G-i8VZ@pO_FW_~~K!#d+Yke@m(dohFXHkxyiV|AQ1@*l z;DX?`7yo$erS0yhMA0JcO1!026}TPLjD&Uau`I*p|V({39^x@}e+5DQVtV9Ae(Letii z2MBnnw%I;CVADM~dZB1^fnzB<26*P@z@uvi(=I;JwdoOR@96q?89I8vd*b#e{_kWx zNOSUDRgbB?rsVp8)bzT+0SwK~(hL87;%s3<&6E4r{?C7%Jb9}?QtOx}k0uDk5mJYF z+Q|8@xEh4x>Kh+?e7ldA4{0pW6-M<8%{c{av9BJ zG%!rPpF*_SbB~8P-I6dgS-ZLCo{9_ zEbK^maa?of`W0-}oxEM7AHk;v8}4RjJ$i8I0zCfB^`e341fcn2`J(t)b0G;$r;((g zqb>c%D|OaEU=^mPojY3DCSJ;9^HEsO+qMPPiUjGiIw?>Z$}S$f@PMqtVBPg|-*7T? zOb*b)bK|Yl^t|Ui5SmlZ&Yb+=Ttgcko2!sEjFll@Hha3}#})0YI9n?j5RMDiz$eF5(xaYr*;XiDV3 zJtZ_Mc`cIcXYP|3$9KezwMk=>hsYp1;ue8pK!8!w2;BiRtrlHlOJ`%7rW`=9kmVO- z%E8Rif$`o^i>5I5N>*Dp##~7z#O0kPjis*+3~vu+K5)jjGz)Fh1NO;2AkKwY&;*n` z$${Od23VJc6O<)*v29Ykh?S8#1ovwO#@KXdj;38PIIR{<`Jygy-!rndz&9NtkPi8zD(Q6;xE@*h#-<d#n1QvIgM`V%uY@xk^u_PC@972Tz zDBm75$$k?(F48p4OOeyVp>SgG3WkC~ZsjHVjmPC6(VslmM2vEIZ$7b?AAOE^N~Pc^ z-p@P}AweIdC^WGV${T|x0L>8BXx;hnd_jAX2hH4b2YNG*_PnR+>Vec8vjh1wCmIi*yzs2Q?z`_#|J#Y1+UA>oJ@8Fj zXa+f!MJ#2DNIXVdCE;64TY_eYM=p+5aLnN_7i}bfIQC{(V!{WjG#9T?f%zGZh^aSe zvhk0{vPT3j6_UKX{I>^9vHlnIXP9{T@mj$hNpSDDv|BSwLNgc?zEs34XyQ%H8P;$U zhAC!=yWU zyVNi~D8!sYR|ueKaKyJXC!E$r=is7aa3!{-N!x%G)?wFp4I~}Te6kT#qh;Khs4o>Z z2UwcJw$7Rs=cGz%u!1Os={&ZTR*g-ee5YH|;pNq=A*peBMKG=Zhr)AhKhqNUjc zEzMJjK$ADp3G-kY;yutD?-en?A%@rqK$D|j{Glr`?k25Z2~cvbC492H*?B%RIZ7x& zQa&6}vfvh=8Ikg(5)S2XENI3W9*XsUh;*9@`kAN?7Exbn+_8B`9GW4C=Yekt@`oB6 zfF=Y@k$NTs%}68?=lE8kNt&54eVWqH4N zOB19il^DXC(L@k`$x++ga|iF%cRspuFt=`nX*L&}{p;WVCo!KUf2xrg za|MNCE1@Gve4;~oxQehf*HfNT{``#qeEfViryt(9T>gAIrgbUi6XZHH`H1lk)ZfW@ z)Z-yt5>gHudaIoM7wxqrkHm)M847_UqZa8 zDyOMy%FQ3j#GmttGZ&NyG`YmwWM|JMElp9MCQiVeP})Spb98(g6G0YBr^TWp+>1PD zF6go@T&vJ^I-ORyb_WcZ)9{elTyo*u!Rti><7UT5^Ce)1UVpf_v;$~@+-}!6oMxM) zdy(&>JXd05d1|SrXU`pGTMwY#xkuJPI(-f0({zyJO}jlXZFO4fK-1Ej*i}dRvWqN^ zX?KMFQTD;Kj1vzVY&MSG z?#ApnyIzt5P12`n?yN2NhO@Y`Lf4CrSHOAmi`4PVLW?7j*>fpq4v%&g(M4nrur5n$ z!|ij_6cERpG}IR`zR@)9I?ZW3dtP8$AlJ`drxG76s&_6C6YG4N+M$8o&$JA?4iX--ld>08>w$?%6RdvElI#8#Q`&?y2h3Yv%V zD~j@qii+~@an|IAStZ25LQESHD{qKZmI=(x zi>>Jqy)Trx$DKMCTYAMEU&C_Ak5I{#;S)#Tsc!t=XX*IMB6UUY$jr=0S4+i7HPv1G z*(c$cUHU%qH%wxyx_&?9BkJ2K=9_wQVXW|OhDBB*iJJL|xkngihBp~YGa|CUh?P7D7ic{;m;_CjIHK@wz%J(i!SdV-u&?4Uc+H0-k_)O#iQ@x#^d*f zx!NA^z6oq$$w(j=fIu9+vmZcnT|kY%DBdS&ojO8s3Rx?go120aosr1qn>U-B`iSgr z^m+aW*=iAJiqu)Su8^t>+Eg?^Rfb%u8Swc6anXh;0H7ITsSS6jEGP?%bD0k06_Mal zQ}M-;+=;RXzsb~bF=*nHgGFC~hUiz3X}r{qzD8B+m&h9$kSI42=Xe6pB<>g5t3}=I z65lN#+sFP0vfbd;ArkgY)-Z!Rl~Pq|-N2mMpWW1) zPleDpM{k4-(oeSJFp(-uXk+=P7&P~D6`p{m^H%b|etNo!sm7|QSfxnnfcp?fW_1-z zM2C;QF594?DOwp&e{N;WE~eG1ZTbITzHR?U#Rw0YzR8xqtM+`B{?yC%1G*4J0Xb9D z^!W0Z_}UWFYu{7@-U(!n`uwg2jJ2v`d-om#JpjrL3{~f->Ab$Y{1|sj)GGzeS6NEM$H$%qQJqI1K;iyUq{$qg z=_371@=gFvCQonO=}-3^tD;_h%NlBT7}2qg)JRD3rNS9Q#9yb0uL^P31&ay$trYKb zyQtv1ySSfGMq)s7z@nE$DE($#pQ#Io!T7wVze8_m@9Jsm)N9(GH@9jVo1Z;tY_9#O z=r(Cb#23N09GEW!NTt{7PQ&rnPk?1G5{40PM%kcizl3(^csd^dIc%76_o$9kwzM@D zouPI`LOCz#uA+@9E^2ixIK4uhyTM=riEq9SI{}hU-^kCuKfVFj!A5b&$j`=69L!#r z_!Ziq=+o0>UF}8Gwz$F;Q3~G!{tgC!k&BPho2^9xt*8G8uIyOC#{+0DqEik!bGVss zLvwTWo%HNyum{8{V}kUNs*D#0|M)2Rf9l(t%d^vS8zw+O6a_#lmZ-29cCSdy>9W*0 zMcE8i_8z-@BmGOfktm%^b+zJ2dwa#-;R`3phO%O}{-ooPz@3dy&V%{;!BGQc=dR-& zs!(m=ZdG5V-`42bZy(!BZM(_#;ecr0Qq_n=j40dw)!0uLkD;Rd%)g52t_@*^8=T4m zfuS<~B&?^%<1P8vi%DFqk>Df$Y>Z2!@`c+QKQK?OTfcDR1d$QiuK?_Q{kt!yIm3&y&L$l)&DNw|xhZbFQ=hEyFto`QEj zWb}UssWJD5qrOC=fk|Ec<v6p|YP>Mj4zY*kCBUOk&^P}YJ1{5|! zr!%^OJY{p9rMLB+sQ#9WwSn_yPwgafwmYngDeY$g-}yFu#sD5Zp@l0vQv|j z@gz)=*&T@ykA%re9GX67dv*S?DUspn)p(Fd?>49*9G~KNw(K(X%|b6Td3HD5hRWZu4EdS^Zp)NEQkPq;HT!Kl2M(bvWkz(YVk=p)xW$Kd30a zGBn=-G;#lKKP){JYr%v6yNLLrNV0e$Z#@QNCa6lZLk`DOpQf@zJNed6*<2d4=}FF4 zNQ+Jlu6V(<&oe%OaT+r2>-9B9@U#Y?iJ(NRx(9Na#(|!IBYs+AIcFiK-bUuN=W(Qp z?(tcN-Bw?m-{J7`>rY-T-l(@5kl@JqFh{4E*ZhDdog2+#<7RE<@yo-WZB)klFy&($ zQmud3rf)2{+c-*JsIvGYZ`Y`>8IYSXYfeGagHCzaQ>a&!S&ash7KgD^{-mE}i||kl z#1kgCy-TR7hjSk58*{1YC3Wr^-JJay56xyRo^$`?c$G)84}rj_?jI$W`RV^YM6ul! z%A{Jo6+9BQK27%Vz56n|V?1Eu{Y<9u+Z(@5zVyN$=iv-GYN4rX-q^v@{$7a;&36yY z=(fa-!%leUBa<~S*23?P*MYx%4*e01uj(K$I^IT&#dI(R)v4kF{P%@5aBawOJ^2rG z9JI10z}|t6yRgLN!W0}mM%nL)zV(~caD+RG&tk={v-|LW#~QD4BUMz5yZO1H%W=iH zje?X^7ciw`jvOo?l38ocaU(hm`?pn@(EPpQdwE@iE(8RGSA`ZkaM+Bej)1V{Oj*bo zLS6DUG=2#B9E>ol@me~#oHDPnIEn5zZV_+a`fxlFs=c1^v-Dj%QT*f<1YePtxYn}Ty_p(XzDxaWN6AF%WoK(K*upOf!52=j1Ns9 zQqWwOHDPE*!Xavbg8ZDxBFk?^kWvHf#?S=%E<-It-cHE4QW z6YiBU&~YpCLyHdcOMCy=P)ApL&4$Yv{b0Vvl|_~hM1Woc?FKpyG#%(W(0ZWzfB=94 zGBgu{rhk13Lv!ub2hrFJ@$UJ8o%>{wMV4Q)aMc!Q zG0_Vw0h{Pv6k<{IO13+xhGfcvC%Vs?;==w=~>udQ$rIaYmZ`GU)2NJL|wb052+bfKr86+fu5(J_p!a%)n0>5&i0lE;0|Gc z$|B2eUhvcYs}-P+*uVrDifv4wvp{o!{sJuqx(qZL=rwn2jvbnS0DuEBG`9dv#;wU6 zp)1cf@i!8r+!B6|IR)9WYTmlURdJ41^+nAV` zjG4(Bn`4Kj49$eTq-5Nhz%uu|9%n}AujZ(a(7{V-Vz`UTO_QM+ytptr!Fvqc8+``^ zs4TL`^2-X)M4*pAD={vCo&s&<5)^kM)2 diff --git a/emacs.d/vendor/flycheck/doc/images/flycheck-verify-buffer.png b/emacs.d/vendor/flycheck/doc/images/flycheck-verify-buffer.png deleted file mode 100644 index b5d040263618e544b1b8dcfef3bcd6d8bd418d8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214170 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

;7CpNU<690}BHu!!?mDdeaR54n4PRno@l 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πQ<2j!C+8 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 while you type, and reports -warnings and errors directly in the buffer, or in an optional :ref:`error list -`: - -.. image:: images/flycheck-annotated.png - -Out of the box Flycheck supports over :ref:`40 different programming languages -` with more than 80 different syntax checking tools, and -comes with a :ref:`simple interface ` to define new -syntax checkers. - -Many :ref:`3rd party extensions ` provide new syntax -checkers and other features like alternative error displays or mode line -indicators. - -Try out -======= - -Flycheck needs GNU Emacs |min-emacs|, and works best on Unix systems. **Windows -users**, please be aware that Flycheck does not support Windows officially, -although it should mostly work fine on Windows. See :ref:`Windows support -` and watch out for `known Windows issues`_! - -To try Flycheck in your Emacs session install some :ref:`syntax checker tools -` and type the following in your ``*scratch*`` buffer and -run ``M-x eval-buffer``: - -.. code-block:: cl - - (require 'package) - (add-to-list 'package-archives - '("MELPA Stable" . "http://stable.melpa.org/packages/") t) - (package-initialize) - (package-refresh-contents) - - (package-install 'flycheck) - - (global-flycheck-mode) - -*On MacOS* also add the following to :ref:`fix your $PATH environment variable -`: - -.. code-block:: cl - - (package-install 'exec-path-from-shell) - (exec-path-from-shell-initialize) - -For a permanent installation of Flycheck follow the :ref:`Installation -` instructions. For a gentle introduction into Flycheck -features go through :ref:`Quickstart ` guide. - -.. important:: - - If Flycheck fails to run properly or gives you any error messages please take - a look at the :ref:`troubleshooting section ` which - covers some common setup issues and helps you debug and fix problems with - Flycheck. - -.. _`known windows issues`: https://github.com/flycheck/flycheck/labels/arch%3A%20windows%20only - -.. _flycheck-user-guide: - -The User Guide -============== - -The User Guide provides installation and usage help for Flycheck. It starts -with installation instructions and a quick start tutorial and then focuses on an -in-depth references of all parts of Flycheck. - -.. toctree:: - - user/installation - user/quickstart - user/troubleshooting - user/syntax-checks - user/syntax-checkers - user/error-reports - user/error-list - user/error-interaction - user/flycheck-versus-flymake - -.. _flycheck-community-guide: - -The Community Guide -=================== - -The Community Guide provides information about Flycheck’s ecosystem and -community. - -.. toctree:: - - community/conduct - community/extensions - community/get-help - community/people - -.. _flycheck-developer-guide: - -The Developer Guide -=================== - -The Developer Guide shows how extend Flycheck and how to write syntax checkers -for Flycheck. - -.. toctree:: - - developer/developing - -.. _flycheck-contributor-guide: - -The Contributor Guide -===================== - -The Contributor Guide explains how to contribute to Flycheck. - -.. toctree:: - - contributor/contributing - contributor/style-guide - contributor/maintaining - -Indices and Tables -================== - -* :ref:`flycheck-languages` -* :doc:`glossary` -* :doc:`changes` -* :ref:`genindex` -* :ref:`search` - -.. toctree:: - :hidden: - - languages - glossary - changes - -Licensing -========= - -Flycheck 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 3 of the License, or (at your option) any later -version. - -Flycheck 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. - -See :ref:`flycheck-gpl` for a copy of the GNU General Public License. - -You may copy, distribute and/or modify the Flycheck documentation under the -terms of the Creative Commons Attribution-ShareAlike 4.0 International Public -License. See :ref:`flycheck-cc-by-sa` for a copy of the license. - -Permission is granted to copy, distribute and/or modify the Flycheck logo under -the terms of the Creative Commons Attribution-ShareAlike 4.0 International -Public License. See :ref:`flycheck-cc-by-sa` for a copy of the license. - -.. toctree:: - :hidden: - :maxdepth: 2 - - licenses diff --git a/emacs.d/vendor/flycheck/doc/info.py b/emacs.d/vendor/flycheck/doc/info.py deleted file mode 100644 index 771fa78..0000000 --- a/emacs.d/vendor/flycheck/doc/info.py +++ /dev/null @@ -1,192 +0,0 @@ -# Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -# This file is not part of GNU Emacs. - -# 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 3 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 . - -import re -from string import Template - -import requests -from docutils import nodes -from sphinx.roles import XRefRole -from sphinx.util import ws_re, logging - -logger = logging.getLogger(__name__) - -# Regular expression object to parse the contents of an Info reference -# role. -INFO_RE = re.compile(r'\A\((?P[^)]+)\)(?P.+)\Z') - - -class InfoNodeXRefRole(XRefRole): - """A role to reference a node in an Info manual.""" - - innernodeclass = nodes.emphasis - - def process_link(self, env, refnode, has_explicit_title, title, target): - """Process the link created by this role. - - Swap node and manual name, to more closely match the look of references - in Texinfo. - - """ - # Normalize whitespace in info node targets - target = ws_re.sub(' ', target) - refnode['has_explicit_title'] = has_explicit_title - if not has_explicit_title: - match = INFO_RE.match(target) - if match: - # Swap title and node to create a title like info does - title = '{0}({1})'.format(match.group('node'), - match.group('manual')) - return title, target - - -def node_encode(char): - if char.isalnum(): - return char - elif char == ' ': - return '-' - else: - return '_00{:02x}'.format(ord(char)) - - -def expand_node_name(node): - """Expand ``node`` for use in HTML. - - ``node`` is the name of a node as string. - - Return a pair ``(filename, anchor)``, where ``filename`` is the base-name - of the corresponding file, sans extension, and ``anchor`` the HTML anchor. - - See - http://www.gnu.org/software/texinfo/manual/texinfo/html_node/HTML-Xref-Node-Name-Expansion.html. - - """ - if node == 'Top': - return ('index', 'Top') - else: - normalized = ws_re.sub(' ', node.strip()) - encoded = ''.join(node_encode(c) for c in normalized) - prefix = 'g_t' if not node[0].isalpha() else '' - return (encoded, prefix + encoded) - - -class HTMLXRefDB(object): - """Cross-reference database for Info manuals.""" - - #: URL of the htmlxref database of GNU Texinfo - XREF_URL = 'http://ftpmirror.gnu.org/texinfo/htmlxref.cnf' - - #: Regular expression to parse entries from an xref DB - XREF_RE = re.compile(r""" -^\s* -(?: -(?P[#].*) | -(?P\w+)\s*=\s*(?P\S+) | -(?P\w+)\s*(?Pnode|mono)\s*(?P\S+) -) -\s*$""", re.VERBOSE) - - @classmethod - def parse(cls, htmlxref): - substitutions = {} - manuals = {} - for line in htmlxref.splitlines(): - match = cls.XREF_RE.match(line) - if match: - if match.group('substname'): - url = Template(match.group('substurl')).substitute( - substitutions) - substitutions[match.group('substname')] = url - elif (match.group('manname') - and match.group('mantype') == 'node'): - url = Template(match.group('manurl')).substitute( - substitutions) - manuals[match.group('manname')] = url - return cls(manuals) - - def __init__(self, entries): - """Initialize the HTMLXrefDB object with the provided entries.""" - self.entries = entries - - def resolve(self, manual, node): - manual_url = self.entries.get(manual) - if not manual_url: - return None - else: - filename, anchor = expand_node_name(node) - return manual_url + filename + '.html#' + anchor - - -def update_htmlxref(app): - if not isinstance(getattr(app.env, 'info_htmlxref', None), HTMLXRefDB): - logger.info('fetching Texinfo htmlxref database from {0}... '.format( - HTMLXRefDB.XREF_URL)) - try: - app.env.info_htmlxref = HTMLXRefDB.parse( - requests.get(HTMLXRefDB.XREF_URL).text) - except requests.exceptions.ConnectionError: - logger.warning('Failed to load xref DB. ' - 'Info references will not be resolved') - app.env.info_htmlxref = None - - -def resolve_info_references(app, _env, refnode, contnode): - """Resolve Info references. - - Process all :class:`~sphinx.addnodes.pending_xref` nodes whose ``reftype`` - is ``infonode``. - - Replace the pending reference with a :class:`~docutils.nodes.reference` - node, which references the corresponding web URL, as stored in the database - referred to by :data:`HTMLXREF_URL`. - - """ - if refnode['reftype'] != 'infonode': - return None - - target = ws_re.sub(' ', refnode['reftarget']) - match = INFO_RE.match(target) - if not match: - logger.warning('Invalid info target: {0}'.format(target), - location=(refnode.source, refnode.line)) - return contnode - - manual = match.group('manual') - node = match.group('node') - - xrefdb = app.env.info_htmlxref - if xrefdb: - uri = xrefdb.resolve(manual, node) - if not uri: - message = 'Cannot resolve info manual {0}'.format(manual) - logger.warning(message, location=(refnode.source, refnode.line)) - return contnode - else: - reference = nodes.reference('', '', internal=False, - refuri=uri, reftitle=target) - reference += contnode - return reference - else: - # Without an xref DB we're unable to resolve any info references - return None - - -def setup(app): - app.add_role('infonode', InfoNodeXRefRole()) - app.connect(str('builder-inited'), update_htmlxref) - app.connect(str('missing-reference'), resolve_info_references) - return {'version': '0.1', 'parallel_read_safe': True} diff --git a/emacs.d/vendor/flycheck/doc/languages.rst b/emacs.d/vendor/flycheck/doc/languages.rst deleted file mode 100644 index 040320c..0000000 --- a/emacs.d/vendor/flycheck/doc/languages.rst +++ /dev/null @@ -1,1611 +0,0 @@ -.. _flycheck-languages: - -===================== - Supported Languages -===================== - -This document lists all programming and markup languages which Flycheck -supports. - -.. note:: - - Extensions may provide support for additional languages or add deeper - integration with existing languages. - - Take a look at the :ref:`list of extensions ` to see - what the community can offer to you. - -Each language has one or more syntax checkers whose names follow a convention of -:samp:`{language}-{tool}`. All syntax checkers are listed in the order they -would be applied to a buffer, with all available options. For more information -about a syntax checker open Emacs and use :command:`flycheck-describe-checker` -to view the docstring of the syntax checker. Likewise, you may use -:command:`describe-variable` to read the complete docstring of any option. - -.. supported-language:: Ada - - .. syntax-checker:: ada-gnat - - Check ADA syntax and types with `GNAT`_. - - .. _GNAT: https://www.adacore.com/community/ - - .. defcustom:: flycheck-gnat-args - - A list of additional options. - - .. defcustom:: flycheck-gnat-include-path - - A list of include directories. Relative paths are relative to the path - of the buffer being checked. - - .. defcustom:: flycheck-gnat-language-standard - - The language standard to use as string. - - .. defcustom:: flycheck-gnat-warnings - - A list of additional warnings to enable. Each item is the name of a - warning category to enable. - -.. supported-language:: AsciiDoc - - .. syntax-checker:: asciidoctor - - Check AsciiDoc with the default Asciidoctor_ backend. - - .. _Asciidoctor: http://asciidoctor.org - - .. syntax-checker:: asciidoc - - Check AsciiDoc_ with the standard AsciiDoc processor. - - .. _AsciiDoc: http://www.methods.co.nz/asciidoc - -.. supported-language:: Awk - - .. syntax-checker:: awk-gawk - - Check Awk with gawk_. - - .. _gawk: https://www.gnu.org/software/gawk/manual - -.. supported-language:: Bazel - - .. syntax-checker:: bazel-buildifier - - Check Bazel with buildifier_. - - .. _buildifier: https://github.com/bazelbuild/buildtools - -.. supported-language:: C/C++ - :index_as: C - C++ - - Flycheck checks C and C++ with either `c/c++-clang` or `c/c++-gcc`, and then - with `c/c++-cppcheck`. - - .. syntax-checker:: c/c++-clang - c/c++-gcc - - Check C/C++ for syntax and type errors with Clang_ or GCC_ respectively. - - .. note:: - - `c/c++-gcc` requires GCC 4.4 or newer. - - .. _Clang: http://clang.llvm.org/ - .. _GCC: https://gcc.gnu.org/ - - .. defcustom:: flycheck-clang-args - flycheck-gcc-args - - A list of additional arguments for `c/c++-clang` and `c/c++-gcc` - respectively. - - .. defcustom:: flycheck-clang-blocks - - Whether to enable blocks in `c/c++-clang`. - - .. defcustom:: flycheck-clang-definitions - flycheck-gcc-definitions - - A list of additional preprocessor definitions for `c/c++-clang` and - `c/c++-gcc` respectively. - - .. defcustom:: flycheck-clang-include-path - flycheck-gcc-include-path - - A list of include directories for `c/c++-clang` and `c/c++-gcc` - respectively, relative to the file being checked. - - .. defcustom:: flycheck-clang-includes - flycheck-gcc-includes - - A list of additional include files for `c/c++-clang` and `c/c++-gcc` - respectively, relative to the file being checked. - - .. defcustom:: flycheck-clang-language-standard - flycheck-gcc-language-standard - - The language standard to use in `c/c++-clang` and `c/c++-gcc` - respectively as string, via the ``-std`` option. - - .. defcustom:: flycheck-clang-ms-extensions - - Whether to enable Microsoft extensions to C/C++ in `c/c++-clang`. - - .. defcustom:: flycheck-clang-no-exceptions - flycheck-gcc-no-exceptions - - Whether to disable exceptions in `c/c++-clang` and - `c/c++-gcc` respectively. - - .. defcustom:: flycheck-clang-no-rtti - flycheck-gcc-no-rtti - - Whether to disable RTTI in `c/c++-clang` and `c/c++-gcc` respectively, - via ``-fno-rtti``. - - .. defcustom:: flycheck-clang-standard-library - - The name of the standard library to use for `c/c++-clang`, as string. - - .. defcustom:: flycheck-gcc-openmp - - Whether to enable OpenMP in `c/c++-gcc`. - - .. defcustom:: flycheck-clang-pedantic - flycheck-gcc-pedantic - - Whether to warn about language extensions in `c/c++-clang` and - `c/c++-gcc` respectively. - - .. defcustom:: flycheck-clang-pedantic-errors - flycheck-gcc-pedantic-errors - - Whether to error on language extensions in `c/c++-clang` and - `c/c++-gcc` respectively. - - .. defcustom:: flycheck-clang-warnings - flycheck-gcc-warnings - - A list of additional warnings to enable in `c/c++-clang` and - `c/c++-gcc` respectively. Each item is the name of a warning or - warning category for ``-W``. - - .. syntax-checker:: c/c++-cppcheck - - Check C/C++ for semantic and stylistic issues with cppcheck_. - - .. _cppcheck: http://cppcheck.sourceforge.net/ - - .. defcustom:: flycheck-cppcheck-checks - - A list of enabled checks. Each item is the name of a check for the - ``--enable`` option. - - .. defcustom:: flycheck-cppcheck-inconclusive - - Whether to enable inconclusive checks. These checks may yield more - false positives than normal checks. - - .. note:: - - This option requires cppcheck 1.54 or newer. - - .. defcustom:: flycheck-cppcheck-include-path - - A list of include directories. Relative paths are relative to the file - being checked. - - .. defcustom:: flycheck-cppcheck-standards - - The C, C++ and/or POSIX standards to use via one or more ``--std=`` - arguments. - - .. defcustom:: flycheck-cppcheck-suppressions - - The cppcheck suppressions list to use via one or more ``--suppress=`` - arguments. - - .. defcustom:: flycheck-cppcheck-suppressions-file - - The cppcheck suppressions file to use via the - ``--suppressions-list=`` argument. - -.. supported-language:: CFEngine - - .. syntax-checker:: cfengine - - Check syntax with `CFEngine `_. - -.. supported-language:: Chef - - .. syntax-checker:: chef-foodcritic - - Check style in Chef recipes with `foodcritic `_. - - .. defcustom:: flycheck-foodcritic-tags - - A list of tags to select. - -.. supported-language:: Coffeescript - - Flycheck checks Coffeescript syntax with `coffee` and then lints with - `coffee-coffeelint`. - - .. syntax-checker:: coffee - - Check syntax with the `Coffeescript `_ compiler. - - .. syntax-checker:: coffee-coffeelint - - Lint with `Coffeelint `_. - - .. syntax-checker-config-file:: flycheck-coffeelintrc - -.. supported-language:: Coq - - .. syntax-checker:: coq - - Check and proof with the standard `Coq `_ compiler. - -.. supported-language:: CSS - - .. syntax-checker:: css-csslint - - Check syntax and style with `CSSLint`_. - - .. _CSSLint: https://github.com/CSSLint/csslint - - .. syntax-checker:: css-stylelint - - Syntax-check and lint CSS with stylelint_. - - .. _stylelint: https://stylelint.io - - .. syntax-checker-config-file:: flycheck-stylelintrc - - .. defcustom:: flycheck-stylelint-quiet - - Whether to run stylelint in quiet mode via ``--quiet``. - -.. supported-language:: CUDA C/C++ - :index_as: CUDA - - .. syntax-checker:: cuda-nvcc - - Checks syntax for CUDA C/C++ using the nvcc - `nvcc `_ compiler - bundled in the NVIDIA Toolkit. - - CUDA C/C++ uses whichever system compiler you have configured, gcc/clang - etc, but will sanitise error messages into a standardised format that - can be picked up via flycheck. Corner cases may cause some odd behavior. - - .. defcustom:: flycheck-cuda-language-standard - - The C or C++ Language standard that you want the CUDA compiler to enforce. - - .. defcustom:: flycheck-cuda-includes - - A list of cuda includes. - - .. defcustom:: flycheck-cuda-include-path - - A list of include directories for nvcc. - - .. defcustom:: flycheck-cuda-definitions - - Additional preprocessor definitions for nvcc. Is passed unaltered to both - GPU compiler and underlying C/C++ compiler. - -.. supported-language:: CWL - - .. syntax-checker:: cwl - - Syntax check with (`Schema Salad `_). - - .. defcustom:: flycheck-cwl-schema-path - - A path for the schema file for Common Workflow Language. - -.. supported-language:: D - - .. syntax-checker:: d-dmd - - Check syntax and types with (`DMD `_). - - .. note:: - - This syntax checker requires DMD 2.066 or newer. - - .. defcustom:: flycheck-dmd-include-path - - A list of include directories. - - .. defcustom:: flycheck-dmd-args - - A list of additional arguments. - - .. seealso:: - - :flyc:`flycheck-d-unittest` - Flycheck extension which provides a syntax checker to run D unittests - on the fly and report the results with Flycheck. - -.. supported-language:: Dockerfile - - .. syntax-checker:: dockerfile-hadolint - - Check syntax and code style with hadolint_ - - .. _hadolint: https://github.com/hadolint/hadolint - -.. supported-language:: Elixir - - .. syntax-checker:: elixir-credo - - Check code style with `credo `_ - - .. defcustom:: flycheck-elixir-credo-strict - - When non-nil, run credo in strict mode, via ``--strict``. - -.. supported-language:: Emacs Lisp - - Flycheck checks Emacs Lisp with `emacs-lisp` and then with - `emacs-lisp-checkdoc`. - - .. syntax-checker:: emacs-lisp - - Check syntax with the built-in byte compiler. - - .. defcustom:: flycheck-emacs-lisp-load-path - - The load path as list of strings. Relative directories are expanded - against the `default-directory` of the buffer being checked. - - .. defcustom:: flycheck-emacs-lisp-initialize-packages - - Whether to initialize Emacs' package manager with `package-initialize` - before checking the buffer. If set to :elisp:`auto` (the default), - only initialize the package managers when checking files under - `user-emacs-directory`. - - .. defcustom:: flycheck-emacs-lisp-package-user-dir - - The package directory as string. Has no effect if - `flycheck-emacs-lisp-initialize-packages` is nil. - - .. defcustom:: flycheck-emacs-lisp-check-declare - - If non-nil, also check `declare-function` forms using - `check-declare-file`. - - .. syntax-checker:: emacs-lisp-checkdoc - - Check Emacs Lisp documentation conventions with ``checkdoc``. - - .. seealso:: - - :infonode:`(elisp)Documentation Tips` - Information about documentation conventions for Emacs Lisp. - - :gh:`purcell/flycheck-package` - Flycheck extension which adds a syntax checker to check for violation - of Emacs Lisp library headers and packaging conventions. - - :infonode:`(elisp)Library Headers` - Information about library headers for Emacs Lisp files. - -.. supported-language:: Ember Templates - - .. syntax-checker:: ember-template - - Check your Ember templates with - `ember-template-lint `_ - - .. syntax-checker-config-file:: flycheck-ember-template-lintrc - -.. supported-language:: Erlang - - Flycheck checks Erlang with `erlang-rebar3` in rebar projects and - `erlang` otherwise. - - .. syntax-checker:: erlang - - Check Erlang with the standard `Erlang `_ - compiler. - - .. defcustom:: flycheck-erlang-include-path - - A list of include directories. - - .. defcustom:: flycheck-erlang-library-path - - A list of library directories. - - .. syntax-checker:: erlang-rebar3 - - Check Erlang with the `rebar3 `_ build tool. - - .. defcustom:: flycheck-erlang-rebar3-profile - - The profile to use when compiling, e.g. "default" or "test". - The default value is nil which will use the test profile in test - directories, the eqc profile in eqc directories and the default profile - otherwise. - -.. supported-language:: ERuby - - .. syntax-checker:: eruby-erubis - - Check ERuby with `erubis `_. - - .. syntax-checker:: eruby-ruumba - - Check syntax and lint with `Ruumba `_. - - .. note:: - - This syntax checker requires Ruumba 0.1.7 or newer. - - .. defcustom:: flycheck-ruumba-lint-only - - Whether to suppress warnings about style issues, via the ``--lint`` - option. - - .. syntax-checker-config-file:: flycheck-ruumbarc - -.. supported-language:: Fortran - - .. syntax-checker:: fortran-gfortran - - Check Fortran syntax and type with GFortran_. - - .. _GFortran: https://gcc.gnu.org/onlinedocs/gfortran/ - - .. defcustom:: flycheck-gfortran-args - - A list of additional arguments. - - .. defcustom:: flycheck-gfortran-include-path - - A list of include directories. Relative paths are relative to the file - being checked. - - .. defcustom:: flycheck-gfortran-language-standard - - The language standard to use via the ``-std`` option. - - .. defcustom:: flycheck-gfortran-layout - - The source code layout to use. Set to :elisp:`free` or :elisp:`fixed` - for free or fixed layout respectively, or nil (the default) to let - GFortran automatically determine the layout. - - .. defcustom:: flycheck-gfortran-warnings - - A list of warnings enabled via the ``-W`` option. - -.. supported-language:: Go - - Flycheck checks Go with the following checkers: - - 1. `go-gofmt` - 2. `go-golint` - 3. `go-vet` - 4. `go-build` or `go-test` - 5. `go-errcheck` - 6. `go-unconvert` - 7. `go-staticcheck` - - .. syntax-checker:: go-gofmt - - Check Go syntax with `gofmt `_. - - .. syntax-checker:: go-golint - - Check Go code style with `Golint `_. - - .. syntax-checker:: go-vet - - Check Go for suspicious code with vet_. - - .. defcustom:: flycheck-go-vet-print-functions - - A list of print-like functions to check calls for format string problems. - - .. defcustom:: flycheck-go-build-tags - - A list of build tags. - - .. _vet: https://golang.org/cmd/vet/ - - .. syntax-checker:: go-build - - Check syntax and type with the `Go compiler`_. - - .. note:: - - This syntax checker requires Go 1.6 or newer. - - .. _Go compiler: https://golang.org/cmd/go - - .. defcustom:: flycheck-go-build-install-deps - - Whether to install dependencies while checking with `go-build` or - `go-test` - - .. defcustom:: flycheck-go-build-tags - :noindex: - - See `flycheck-go-build-tags` - - .. syntax-checker:: go-test - - Check syntax and types of Go tests with the `Go compiler`_. - - .. note:: - - This syntax checker requires Go 1.6 or newer. - - .. defcustom:: flycheck-go-build-install-deps - :noindex: - - See `flycheck-go-build-install-deps`. - - .. defcustom:: flycheck-go-build-tags - :noindex: - - See `flycheck-go-build-tags` - - .. syntax-checker:: go-errcheck - - Check for unhandled error returns in Go with errcheck_. - - .. note:: - - This syntax checker requires errcheck build from commit 8515d34 (Aug - 28th, 2015) or newer. - - .. _errcheck: https://github.com/kisielk/errcheck - - .. defcustom:: flycheck-go-build-tags - :noindex: - - See `flycheck-go-build-tags` - - .. syntax-checker:: go-unconvert - - Check for unnecessary type conversions with unconvert_. - - .. _unconvert: https://github.com/mdempsky/unconvert - - .. syntax-checker:: go-staticcheck - - Perform static analysis and code linting with staticcheck_, the successor to megacheck. - - .. defcustom:: flycheck-go-version - - staticcheck_ explicitly supports the last two releases of Go, but - supports targeting older versions. Go versions should be specified - like, "1.6", or, "1.11.4". - - .. _staticcheck: https://staticcheck.io/ - -.. supported-language:: Groovy - - .. syntax-checker:: groovy - - Check syntax using the `Groovy `_ compiler. - -.. supported-language:: Haml - - .. syntax-checker:: haml - - Check syntax with the `Haml `_ compiler. - -.. supported-language:: Handlebars - - .. syntax-checker:: handlebars - - Check syntax with the `Handlebars `_ compiler. - -.. supported-language:: Haskell - - Flycheck checks Haskell with `haskell-stack-ghc` (in Stack projects) or - `haskell-ghc`, and then with `haskell-hlint`. - - .. seealso:: - - :flyc:`flycheck-haskell` - Flycheck extension to configure Flycheck's Haskell checkers from the - metadata, with support for Cabal sandboxes. - - :flyc:`flycheck-hdevtools` - Flycheck extension which adds an alternative syntax checker for GHC - using `hdevtools `_. - - .. syntax-checker:: haskell-stack-ghc - haskell-ghc - - Check syntax and type GHC_. In Stack_ projects invoke GHC through Stack - to bring package dependencies from Stack in. - - .. _GHC: https://www.haskell.org/ghc/ - .. _Stack: https://github.com/commercialhaskell/stack - - .. defcustom:: flycheck-ghc-args - - A list of additional arguments. - - .. defcustom:: flycheck-ghc-no-user-package-database - - Whether to disable the user package database (only for `haskell-ghc`). - - .. defcustom:: flycheck-ghc-stack-use-nix - - Whether to enable Nix support for Stack (only for `haskell-stack-ghc`). - - .. defcustom:: flycheck-ghc-stack-project-file - - Allows to override the default ``stack.yaml`` file for Stack, - via ``--stack-yaml`` (only for `haskell-stack-ghc`). - - .. defcustom:: flycheck-ghc-package-databases - - A list of additional package databases for GHC (only for - `haskell-ghc`). Each item points to a directory containing a package - directory, via ``-package-db``. - - .. defcustom:: flycheck-ghc-search-path - - A list of module directories, via ``-i``. - - .. defcustom:: flycheck-ghc-language-extensions - - A list of language extensions, via ``-X``. - - .. syntax-checker:: haskell-hlint - - Lint with `hlint `_. - - .. defcustom:: flycheck-hlint-args - - A list of additional arguments. - - .. defcustom:: flycheck-hlint-language-extensions - - A list of language extensions to enable. - - .. defcustom:: flycheck-hlint-ignore-rules - - A list of rules to ignore. - - .. defcustom:: flycheck-hlint-hint-packages - - A list of additional hint packages to include. - - .. syntax-checker-config-file:: flycheck-hlintrc - -.. supported-language:: HTML - - .. syntax-checker:: html-tidy - - Check HTML syntax and style with `Tidy HTML5`_. - - .. _Tidy HTML5: https://github.com/htacg/tidy-html5 - - .. syntax-checker-config-file:: flycheck-tidyrc - -.. supported-language:: Javascript - - Flycheck checks Javascript with one of `javascript-eslint` or - `javascript-jshint`. - - Alternatively `javascript-standard` is used instead all of the former ones. - - .. syntax-checker:: javascript-eslint - - Check syntax and lint with `ESLint `_. - - .. note:: - - Flycheck automatically :ref:`disables ` - this syntax checker if eslint cannot find a valid configuration file - for the current buffer. - - .. defcustom:: flycheck-eslint-args - - A list of additional arguments that are passed to eslint. - - .. defcustom:: flycheck-eslint-rules-directories - - A list of directories with custom rules. - - .. syntax-checker:: javascript-jshint - - Check syntax and lint with `JSHint `_. - - .. defcustom:: flycheck-jshint-extract-javascript - - Whether to extract Javascript from HTML before linting. - - .. syntax-checker-config-file:: flycheck-jshintrc - - .. syntax-checker:: javascript-standard - - Check syntax and code style with Standard_ or Semistandard_. - - .. _Standard: https://github.com/standard/standard - .. _Semistandard: https://github.com/Flet/semistandard - -.. supported-language:: JSON - - Flycheck checks JSON with `json-jsonlint`, `json-python-json`, or - `json-jq`. - - .. syntax-checker:: json-jsonlint - - Check JSON with `jsonlint `_. - - .. syntax-checker:: json-python-json - - Check JSON with Python's built-in :py:mod:`json` module. - - .. syntax-checker:: json-jq - - Check JSON with jq_. - - This checker accepts multiple consecutive JSON values in a single input, which is useful for jsonlines data. - - .. _jq: https://stedolan.github.io/jq/ - -.. supported-language:: Jsonnet - - .. syntax-checker:: jsonnet - - Checks `Jsonnet `_ with `jsonnet`. - -.. supported-language:: Less - - .. syntax-checker:: less - - Check syntax with the `Less `_ compiler. - - .. note:: - - This syntax checker requires lessc 1.4 or newer. - - .. syntax-checker:: less-stylelint - - Syntax-check and lint Less with stylelint_. - - .. _stylelint: https://stylelint.io - - .. syntax-checker-config-file:: flycheck-stylelintrc - - .. defcustom:: flycheck-stylelint-quiet - - Whether to run stylelint in quiet mode via ``--quiet``. - -.. supported-language:: LLVM - - .. syntax-checker:: llvm-llc - - Check syntax with `llc `_. - -.. supported-language:: Lua - - Flycheck checks Lua with `lua-luacheck`, falling back to `lua`. - - .. syntax-checker:: lua-luacheck - - Check syntax and lint with Luacheck_. - - .. syntax-checker-config-file:: flycheck-luacheckrc - - .. defcustom:: flycheck-luacheck-standards - - The luacheck standards to use via one or more ``--std`` arguments. - - .. _Luacheck: https://github.com/mpeterv/luacheck - - .. syntax-checker:: lua - - Check syntax with the `Lua compiler `_. - -.. supported-language:: Markdown - - .. syntax-checker:: markdown-markdownlint-cli - - Check Markdown with `markdownlint-cli - `_. - - .. syntax-checker-config-file:: flycheck-markdown-markdownlint-cli-config - - .. syntax-checker:: markdown-mdl - - Check Markdown with `markdownlint `_. - - .. defcustom:: flycheck-markdown-mdl-rules - - A list of enabled rules. - - .. defcustom:: flycheck-markdown-mdl-tags - - A list of enabled rule tags. - - .. syntax-checker-config-file:: flycheck-markdown-mdl-style - -.. supported-language:: Nix - - .. syntax-checker:: nix - - Check Nix with nix-instantiate_. - - .. _nix-instantiate: https://nixos.org/nix/manual/#sec-nix-instantiate - - .. syntax-checker:: nix-linter - - Check Nix with nix-linter_. - - .. _nix-linter: https://github.com/Synthetica9/nix-linter - -.. supported-language:: Opam - - .. syntax-checker:: opam - - Check Opam configuration files with `opam lint`_. - - .. _opam lint: https://opam.ocaml.org/doc/man/opam-lint.html - -.. supported-language:: Perl - - Flycheck checks Perl with `perl` and `perl-perlcritic`. - - .. syntax-checker:: perl - - Check syntax with the `Perl `_ interpreter. - - .. defcustom:: flycheck-perl-include-path - - A list of include directories, relative to the file being checked. - - .. defcustom:: flycheck-perl-module-list - - A list of module names to implicitly use. - - .. syntax-checker:: perl-perlcritic - - Lint and check style with `Perl::Critic`_. - - .. _Perl::Critic: https://metacpan.org/pod/Perl::Critic - - .. defcustom:: flycheck-perlcritic-severity - - The severity level as integer for the ``--severity``. - - .. defcustom:: flycheck-perlcritic-theme - - The theme expression, passed as the ``--theme`` to ``perlcritic``. - - .. syntax-checker-config-file:: flycheck-perlcriticrc - -.. supported-language:: PHP - - Flycheck checks PHP with `php`, `php-phpmd` and `php-phpcs`. - - .. syntax-checker:: php - - Check syntax with `PHP CLI`_ - - .. _PHP CLI: http://php.net/manual/en/features.commandline.php - - .. syntax-checker:: php-phpmd - - Lint with `PHP Mess Detector `_. - - .. defcustom:: flycheck-phpmd-rulesets - - A list of rule sets. Each item is either the name of a default rule - set, or the path to a custom rule set file. - - .. syntax-checker:: php-phpcs - - Check style with `PHP Code Sniffer`_. - - .. note:: - - This syntax checker requires PHP Code Sniffer 2.6 or newer. - - .. _PHP Code Sniffer: http://pear.php.net/package/PHP_CodeSniffer - - .. defcustom:: flycheck-phpcs-standard - - The coding standard, either as name of a built-in standard, or as path - to a standard specification. - -.. supported-language:: Processing - - .. syntax-checker:: processing - - Check syntax using the `Processing `_ compiler. - -.. supported-language:: Protobuf - - .. syntax-checker:: protobuf-protoc - - Check syntax using the protoc_ compiler. - - .. _protoc: https://developers.google.com/protocol-buffers/ - - .. defcustom:: flycheck-protoc-import-path - - A list of directories to resolve import directives. Relative paths are - relative to the path of the buffer being checked. - - .. syntax-checker:: protobuf-prototool - - Lint with `prototool `_. - -.. supported-language:: Pug - - .. syntax-checker:: pug - - Check syntax using the `Pug `_ compiler. - -.. supported-language:: Puppet - - Flycheck checks Puppet with `puppet-parser` and lints with `puppet-lint`. - - .. syntax-checker:: puppet-parser - - Check syntax with the `Puppet `_ compiler. - - .. syntax-checker:: puppet-lint - - Link with `Puppet Lint `_. - - .. defcustom:: flycheck-puppet-lint-disabled-checks - - A list of checks to disable. - - .. syntax-checker-config-file:: flycheck-puppet-lint-rc - -.. supported-language:: Python - - Flycheck checks Python with `python-flake8` or `python-pylint`, and falls - back to `python-pycompile` if neither of those is available. - - All Python checkers are invoked indirectly using ``python -c ...`` (rather - than a direct call to ``flake8`` or ``pylint``) to make it easier to switch - between Python 2 and 3. For example, you can use ``(setq - flycheck-python-pylint-executable "python3")`` to run ``pylint`` using Python - 3, or ``(defvaralias 'flycheck-python-flake8-executable - 'python-shell-interpreter)`` to run ``flake8`` through the executable pointed - to by ``python-shell-interpreter``. - - .. note:: - - If Flycheck complains about a missing Python checker, make sure that the - checker is reachable from ``sys.path``, using e.g. ``python -m pylint``: - often, the issue is that the checker is installed globally but not in the - current virtualenv. Alternatively, you can invoke the checker script - directly, with ``(setq flycheck-python-pylint-executable "pylint")``. - - .. seealso:: - - :gh:`flycheck-pyflakes ` - Flycheck extension which adds a syntax checker using `Pyflakes - `_. - - :gh:`msherry/flycheck-pycheckers` - Flycheck extension which can use multiple checkers simultaneously -- - including pyflakes, pep8, flake8, pylint, and mypy 2/3. - - .. syntax-checker:: python-flake8 - - Check syntax and lint with `flake8 `_. - - .. note:: - - This syntax checker requires flake8 3.0 or newer. - - .. defcustom:: flycheck-flake8-error-level-alist - - An alist mapping Flake8 error IDs to Flycheck error levels. - - .. defcustom:: flycheck-flake8-maximum-complexity - - The maximum McCabe complexity allowed for methods. - - .. defcustom:: flycheck-flake8-maximum-line-length - - The maximum length of lines. - - .. syntax-checker-config-file:: flycheck-flake8rc - - .. syntax-checker:: python-pyright - - Type check python with `pyright `_. - - .. note:: - - This syntax checker requires pyright. - - .. syntax-checker:: python-mypy - - Type check python with `mypy `_. - - .. note:: - - This syntax checker requires mypy 0.580 or newer. - - .. syntax-checker-config-file:: flycheck-python-mypy-config - - .. defcustom:: flycheck-python-mypy-cache-dir - - Directory used to write ``.mypy_cache`` directories. - - Set to ``null-device`` to disable writing cache directories - entirely. - - .. syntax-checker:: python-pylint - - Check syntax and lint with `Pylint `_. - - .. note:: - - This syntax checker requires Pylint 1.0 or newer. - - .. defcustom:: flycheck-pylint-use-symbolic-id - - Whether to report symbolic (e.g. ``no-name-in-module``) or numeric - (e.g. ``E0611``) message identifiers. - - .. syntax-checker-config-file:: flycheck-pylintrc - - .. syntax-checker:: python-pycompile - - Check syntax with Python's byte compiler (see :py:mod:`py_compile`). - -.. supported-language:: R - - .. syntax-checker:: r-lintr - - Check syntax and lint with `lintr `_. - - .. defcustom:: flycheck-lintr-caching - - Whether to enable caching in lintr. On by default; it is not - recommended to disable caching unless it causes actual problems. - - .. defcustom:: flycheck-lintr-linters - - Linters to use as a string with an R expression which selects the - linters to use. - -.. supported-language:: Racket - - .. syntax-checker:: racket - - Check syntax with `raco expand`_ from the ``compiler-lib`` package. - - .. note:: - - This syntax checker needs the ``compiler-lib`` package. - - .. _raco expand: http://docs.racket-lang.org/raco/expand.html - -.. supported-language:: RPM Spec - - .. syntax-checker:: rpm-rpmlint - - Lint with `rpmlint `_. - -.. supported-language:: reStructuredText - - Flycheck checks reStructuredText with `rst-sphinx` in Sphinx_ projects and - with `rst` otherwise. - - .. _Sphinx: http://sphinx-doc.org/ - - .. syntax-checker:: rst-sphinx - - Check documents with Sphinx_. - - .. note:: - - This syntax checker requires Sphinx 1.2 or newer. - - .. defcustom:: flycheck-sphinx-warn-on-missing-references - - Whether to emit warnings for all missing references. - - .. syntax-checker:: rst - - Check documents with `docutils `_. - -.. supported-language:: Ruby - - Flycheck checks Ruby with `ruby-rubocop`, `ruby-reek` and `ruby-rubylint`, - falling back to `ruby` or `ruby-jruby` for basic syntax checking if those - are not available. - - .. syntax-checker:: ruby-rubocop - - Check syntax and lint with `RuboCop `_. - - .. note:: - - This syntax checker requires Rubocop 0.34 or newer. - - .. defcustom:: flycheck-rubocop-lint-only - - Whether to suppress warnings about style issues, via the ``--lint`` - option. - - .. syntax-checker-config-file:: flycheck-rubocoprc - - .. syntax-checker:: ruby-standard - - Check syntax and lint with `Ruby Standard `_. - - .. note:: - - This syntax checker and ruby-rubocop are mutually exclusive, since Standard employs an opinionated rubocop config. - - .. defcustom:: flycheck-rubocop-lint-only - :noindex: - - See `flycheck-rubocop-lint-only`. - - .. syntax-checker-config-file:: flycheck-ruby-standardrc - - .. syntax-checker:: ruby-reek - - Check syntax and lint with reek_. - - .. _Reek: https://github.com/troessner/reek - - .. syntax-checker-config-file:: flycheck-reekrc - - .. note:: - - ``flycheck-reekrc`` defaults to ``nil``, because Reek can find its own - configuration. - - .. syntax-checker:: ruby-rubylint - - Check syntax and lint with ruby-lint_. - - .. note:: - - This syntax checker requires ruby-lint 2.0.2 or newer. - - .. _ruby-lint: http://code.yorickpeterse.com/ruby-lint/latest/ - - .. syntax-checker-config-file:: flycheck-rubylintrc - - .. syntax-checker:: ruby - - Check syntax with the `Ruby `_ interpreter. - - .. syntax-checker:: ruby-jruby - - Check syntax with the `JRuby `_ interpreter. - -.. supported-language:: Rust - - Flycheck checks Rust_ with `rust-cargo` in Cargo projects, or `rust` - otherwise. For Cargo projects, you can also use the clippy_ linter with - `rust-clippy`. - - .. _Rust: https://www.rust-lang.org/ - .. _clippy: https://github.com/rust-lang-nursery/rust-clippy - - .. syntax-checker:: rust-cargo - rust - rust-clippy - - Check syntax and types with the Rust_ compiler. In a Cargo_ project the - compiler is invoked through ``cargo check`` to take Cargo dependencies - into account. - - `rust-clippy` has no configurable options. - - .. note:: - - `rust-cargo` requires Rust 1.17 or newer. - `rust` requires Rust 1.18 or newer. - `rust-clippy` requires the nightly version of Rust. - - .. _Cargo: http://doc.crates.io/index.html - - .. seealso:: - - :flyc:`flycheck-rust` - Flycheck extension to configure Rust syntax checkers according to - the current Cargo_ project. - - .. defcustom:: flycheck-rust-args - - A list of additional arguments that are passed to rustc. This option - is ignored by `rust-cargo`. - - .. defcustom:: flycheck-cargo-check-args - - A list of additional arguments passed to the ``cargo check`` - subcommand. - - .. defcustom:: flycheck-rust-check-tests - - Whether to check test code in Rust. - - .. defcustom:: flycheck-rust-crate-root - - A path to the crate root for the current buffer, or nil if the current - buffer is a crate by itself. - - `rust-cargo` ignores this option as the crate root is given by Cargo. - - .. defcustom:: flycheck-rust-crate-type - - For `rust-cargo`, the target type as a string, one of ``lib``, ``bin``, - ``example``, ``test`` or ``bench``. Can also be nil for projects with - a single target. - - For `rust`, the type of the crate to check, as a string for the - ``--crate-type`` option. - - .. defcustom:: flycheck-rust-binary-name - - The name of the binary to pass to ``cargo check --TARGET-TYPE``, as a - string. - - For `rust-cargo`, always required unless `flycheck-rust-crate-type` is - ``lib`` or nil, in which case it is ignored. - - Ignored by `rust`. - - .. defcustom:: flycheck-rust-features - - List of features to activate during build or check. - - The value of this variable is a list of strings denoting features - that will be activated to build the target to check. Features will - be passed to ``cargo check --features=FEATURES``. - - Empty by default. - - Ignored by `rust`. - - .. defcustom:: flycheck-rust-library-path - - A list of additional library directories. Relative paths are relative - to the buffer being checked. - -.. supported-language:: Sass/SCSS - - Flycheck checks SASS with `sass/scss-sass-lint`, falling back to `sass`, and - SCSS with `scss-lint` or `scss-stylelint` falling back to - `sass/scss-sass-lint` first and then `scss` if neither is available. - - .. syntax-checker:: scss-lint - - Syntax-check and lint SCSS with SCSS-Lint_. - - .. note:: - - This syntax checker requires SCSS-Lint 0.43.2 or newer. - - .. _SCSS-Lint: https://github.com/brigade/scss-lint - - .. syntax-checker-config-file:: flycheck-scss-lintrc - - .. syntax-checker:: sass/scss-sass-lint - - Syntax-check and lint Sass/SCSS with SASS-Lint_. - - .. _SASS-Lint: https://github.com/sasstools/sass-lint - - .. syntax-checker-config-file:: flycheck-sass-lintrc - - .. syntax-checker:: scss-stylelint - - Syntax-check and lint SCSS with stylelint_. - - .. _stylelint: https://stylelint.io - - .. syntax-checker-config-file:: flycheck-stylelintrc - - .. defcustom:: flycheck-stylelint-quiet - - Whether to run stylelint in quiet mode via ``--quiet``. - - .. syntax-checker:: sass - scss - - Check SASS and SCSS respectively with the `SCSS compiler - `_. - - .. defcustom:: flycheck-sass-compass - flycheck-scss-compass - - Whether to enable the Compass CSS framework with ``--compass``. - -.. supported-language:: Scala - - Flycheck checks Scala with `scala` and `scala-scalastyle`. - - .. syntax-checker:: scala - - Check syntax and types with the `Scala `_ - compiler. - - .. note:: - - This syntax checker is fairly primitive. For a better Scala experience - we recommend Ensime_. - - .. _Ensime: http://ensime.github.io/ - - .. syntax-checker:: scala-scalastyle - - Check style with `Scalastyle `_. - - .. syntax-checker-config-file:: flycheck-scalastylerc - - .. important:: - - A configuration file is mandatory for this syntax checker. If - `flycheck-scalastylerc` is not set or the configuration file not found - this syntax checker will not be applied. - -.. supported-language:: Scheme - - Flycheck checks CHICKEN Scheme files with ``csc``. - - .. syntax-checker:: scheme-chicken - - Check syntax with ``csc``, the `CHICKEN Scheme `_ - compiler. - - .. defcustom:: flycheck-scheme-chicken-args - - A list of additional options. - - .. important:: - - `Geiser `_ must be installed and active for - this checker to work. - -.. supported-language:: Shell scripting languages - - Flycheck checks various shell scripting languages: - - * Bash with `sh-bash` and `sh-shellcheck` - * POSIX shell (i.e. :file:`/bin/sh`) with `sh-posix-dash` or `sh-posix-bash` - * Zsh with `sh-zsh` - - .. syntax-checker:: sh-bash - - Check Bash_ syntax. - - .. _Bash: http://www.gnu.org/software/bash/ - - .. defcustom:: flycheck-sh-bash-args - - A list of additional arguments that are passed to bash. - - .. syntax-checker:: sh-posix-dash - - Check POSIX shell syntax with Dash_. - - .. _Dash: http://gondor.apana.org.au/~herbert/dash/ - - .. syntax-checker:: sh-posix-bash - - Check POSIX shell syntax with Bash_. - - .. syntax-checker:: sh-zsh - - Check `Zsh `_ syntax. - - .. syntax-checker:: sh-shellcheck - - Lint Bash and POSIX shell with ShellCheck_. - - .. _ShellCheck: https://github.com/koalaman/shellcheck/ - - .. defcustom:: flycheck-shellcheck-excluded-warnings - - A list of excluded warnings. - - .. defcustom:: flycheck-shellcheck-follow-sources - - Allow shellcheck to read sourced files. - -.. supported-language:: Slim - - .. syntax-checker:: slim - - Check Slim using the `Slim `_ compiler. - - .. syntax-checker:: slim-lint - - Check Slim best practices using the `slim-lint - `_ linter. - -.. supported-language:: SQL - - .. syntax-checker:: sql-sqlint - - Check SQL syntax with `Sqlint `_. - -.. supported-language:: systemd Unit Configuration - - .. syntax-checker:: systemd-analyze - - Check systemd unit configuration file syntax with `systemd-analyze`_. - - .. _systemd-analyze: https://www.freedesktop.org/software/systemd/man/systemd-analyze.html - -.. supported-language:: Tcl - - .. syntax-checker:: tcl-nagelfar - - Check Tcl syntax with `Nagelfar `_. - -.. supported-language:: Terraform - - .. syntax-checker:: terraform - - Check Terraform syntax with `terraform fmt`_ - - .. _terraform fmt: https://www.terraform.io/docs/commands/fmt.html - - .. syntax-checker:: terraform-tflint - - Check Terraform with `tflint `_ - - .. defcustom:: flycheck-tflint-variable-files - - A list of files to resolve terraform variables. Relative paths are - relative to the path of the buffer being checked. - -.. supported-language:: Text - - .. syntax-checker:: proselint - - Check English prose with `Proselint `_. - - .. syntax-checker:: textlint - - Check prose with `textlint `_. - - .. syntax-checker-config-file:: flycheck-textlint-config - - .. defcustom:: flycheck-textlint-plugin-alist - - An alist mapping major modes to textlint plugins. - - Flycheck currently supports the following textlint plugins on NPM: - - * textlint-plugin-rst - * textlint-plugin-html - * textlint-plugin-latex - * textlint-plugin-asciidoctor (as well as other AsciiDoc plugins) - - .. note:: - - textlint plugins need to be installed separately. - -.. supported-language:: TeX/LaTeX - - Flycheck checks TeX and LaTeX with either `tex-chktex` or `tex-lacheck`. - - .. syntax-checker:: tex-chktex - - Check style with `ChkTeX `_. - - .. syntax-checker-config-file:: flycheck-chktexrc - - .. syntax-checker:: tex-lacheck - - Check style with `Lacheck `_. - -.. supported-language:: Texinfo - - .. syntax-checker:: texinfo - - Check syntax with :program:`makeinfo` from Texinfo_. - - .. _Texinfo: http://www.gnu.org/software/texinfo/ - -.. supported-language:: TypeScript - - .. syntax-checker:: typescript-tslint - - Check syntax and style with `TSLint `_. - - .. syntax-checker-config-file:: flycheck-typescript-tslint-config - - .. defcustom:: flycheck-typescript-tslint-rulesdir - - Additional rules directory, for user created rules. - - .. defcustom:: flycheck-tslint-args - - A list of additional arguments that are passed to tslint. - -.. supported-language:: Verilog - - .. syntax-checker:: verilog-verilator - - Check syntax with `Verilator `_. - - .. defcustom:: flycheck-verilator-include-path - - A list of include directories. Relative paths are relative to the file - being checked. - -.. supported-language:: VHDL - - .. syntax-checker:: vhdl-ghdl - - Check syntax with `GHDL `_. - - .. defcustom:: flycheck-ghdl-language-standard - - The language standard to use as string. - - .. defcustom:: flycheck-ghdl-workdir - - The directory to use for the file library. - - .. defcustom:: flycheck-ghdl-ieee-library - - The standard to use for the IEEE library. - -.. supported-language:: XML - - Flycheck checks XML with `xml-xmlstarlet` or `xml-xmllint`. - - .. syntax-checker:: xml-xmlstarlet - - Check syntax with `XMLStarlet `_. - - .. defcustom:: flycheck-xml-xmlstarlet-xsd-path - flycheck-xml-xmllint-xsd-path - - Location of XSD schema to validate against for `xml-xmlstarlet` and - `xml-xmllint` respectively. - - .. syntax-checker:: xml-xmllint - - Check syntax with :program:`xmllint` from Libxml2_. - - .. _Libxml2: http://www.xmlsoft.org/ - -.. supported-language:: YAML - - Flycheck checks YAML with `yaml-jsyaml`, `yaml-ruby` or 'yaml-yamllint'. - - .. syntax-checker:: yaml-jsyaml - - Check syntax with `js-yaml `_. - - .. syntax-checker:: yaml-ruby - - Check syntax with Ruby's YAML parser. - - .. syntax-checker:: yaml-yamllint - - Check syntax with yamllint. - - .. syntax-checker-config-file:: flycheck-yamllintrc diff --git a/emacs.d/vendor/flycheck/doc/licenses.rst b/emacs.d/vendor/flycheck/doc/licenses.rst deleted file mode 100644 index 413241b..0000000 --- a/emacs.d/vendor/flycheck/doc/licenses.rst +++ /dev/null @@ -1,17 +0,0 @@ -=================== - Flycheck licenses -=================== - -.. _flycheck-gpl: - -GNU General Public License 3 -============================ - -.. literalinclude:: ../COPYING - -.. _flycheck-cc-by-sa: - -Creative Commons Attribution-ShareAlike 4.0 International -========================================================= - -.. literalinclude:: COPYING.cc-by-sa diff --git a/emacs.d/vendor/flycheck/doc/requirements.txt b/emacs.d/vendor/flycheck/doc/requirements.txt deleted file mode 100644 index cf3cc93..0000000 --- a/emacs.d/vendor/flycheck/doc/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -# Sphinx -Sphinx>=1.6 -# Automatically build documentation on changes -sphinx-autobuild -# Sphinx theme -alabaster>=0.7.8 -# Syntax highlighting -Pygments>=2.1 -# Network access -requests>=2.9 diff --git a/emacs.d/vendor/flycheck/doc/user/error-interaction.rst b/emacs.d/vendor/flycheck/doc/user/error-interaction.rst deleted file mode 100644 index b827b19..0000000 --- a/emacs.d/vendor/flycheck/doc/user/error-interaction.rst +++ /dev/null @@ -1,199 +0,0 @@ -====================== - Interact with errors -====================== - -There are a couple of things that you can do with Flycheck errors in a buffer: - -* You can navigate to errors, and go to the next or previous error. -* You can display errors to read their error messages. -* You can put error messages and IDs into the kill ring. - -This section documents the corresponding commands and their customisation -options. - -Navigate errors -=============== - -By default Flycheck hooks into Emacs’ standard error navigation on :kbd:`M-g n` -(`next-error`) and :kbd:`M-g p` (`previous-error`). When :mode:`flycheck` is -enabled these commands will jump to the next and previous Flycheck error -respectively. See :infonode:`(emacs)Compilation Mode` for more information -about these commands. - -This way you don’t need to learn special keybindings to navigate Flycheck -errors; navigation should just work out of the box. - -.. note:: - - Visible compilation buffers such as buffers from ``M-x compile``, ``M-x - grep``, etc. still take *precedence* over Flycheck’s errors. - -The exact behaviour of these error navigation features is very context-dependent -and can be very confusing at times so you can disable this integration: - -.. defcustom:: flycheck-standard-error-navigation - - Whether to integrate Flycheck errors into Emacs’ standard error navigation. - Defaults to ``t``, set to ``nil`` to disable. - - .. important:: - - When changing the value you must disable :mode:`flycheck` and enable it - again for the change to take effect in any buffers where :mode:`flycheck` - is enabled. - -Flycheck provides an independent set of navigation commands which will always -navigate Flycheck errors in the current buffer, regardless of visible -compilation buffers and `flycheck-standard-error-navigation`: - -.. define-key:: C-c ! n - M-x flycheck-next-error - - Jump to the next error. - - With prefix argument jump forwards by as many errors as specified by the - prefix argument, e.g. :kbd:`M-3 C-c ! n` will move to the 3rd error from the - current point. With negative prefix argument move to previous errors - instead. Signal an error if there are no more Flycheck errors. - -.. define-key:: C-c ! p - M-x flycheck-previous-error - - Jump to the previous Flycheck error. - - With prefix argument jump backwards by as many errors as specified by the - prefix argument, e.g. :kbd:`M-3 C-c ! p` will move to the 3rd error before - the current point. With negative prefix argument move to next errors - instead. Signal an error if there are no more Flycheck errors. - -.. define-key:: M-x flycheck-first-error - - Jump to the first Flycheck error. - - With prefix argument, jump forwards to by as many errors as specified by the - prefix argument, e.g. :kbd:`M-3 M-x flycheck-first-error` moves to the 3rd - error from the beginning of the buffer. With negative prefix argument move - to the last error instead. - -By default error navigation jumps to all errors but you can choose to skip over -errors with low levels: - -.. defcustom:: flycheck-navigation-minimum-level - - The minimum levels of errors to consider for navigation. - - If set to an error level only navigate to errors whose level is as least as - severe as this one. If ``nil`` navigate to all errors. - -Display errors -============== - -Whenever you move point to an error location Flycheck automatically displays all -Flycheck errors at point after a short delay which you can customise: - -.. defcustom:: flycheck-display-errors-delay - - The number of seconds to wait before displaying the error at point. Floating - point numbers can express fractions of seconds. - -By default Flycheck shows the error messages in the minibuffer or in a separate -buffer if the minibuffer is too small to hold the whole error message but this -behaviour is entirely customisable: - -.. defcustom:: flycheck-display-errors-function - - A function to display errors. - - The function is given the list of Flycheck errors to display as sole argument - and shall display these errors to the user in some way. - -Flycheck provides two built-in functions for this option: - -.. defun:: flycheck-display-error-messages errors - flycheck-display-error-messages-unless-error-list errors - - Show error messages and IDs in the echo area or in a separate buffer if the - echo area is too small (using `display-message-or-buffer` which see). The - latter only displays errors when the :ref:`error list ` - is not visible. To enable it add the following to your :term:`init file`: - - .. code-block:: elisp - - (setq flycheck-display-errors-function - #'flycheck-display-error-messages-unless-error-list) - -.. seealso:: - - :flyc:`flycheck-pos-tip` - A Flycheck extension to display errors in a GUI popup. - -Additionally Flycheck shows errors in a GUI tooltip whenever you hover an error -location with the mouse pointer. By default the tooltip contains the messages -and IDs of all errors under the pointer, but the contents are customisable: - -.. defcustom:: flycheck-help-echo-function - - A function to create the contents of the tooltip. - - The function is given a list of Flycheck errors to display as sole argument - and shall return a single string to use as the contents of the tooltip. - -Errors from other files -======================= - -Some checkers may return errors from files other than the current buffer (e.g., -`gcc` may complain about errors in included files). These errors appear in the -error list, and are also added on the first line of the current buffer. You can -jump to the incriminating files with `flycheck-previous-error`. - -By default, warnings and info messages from other files are ignored, but you can -customize the minimum level: - -.. defcustom:: flycheck-relevant-error-other-file-minimum-level - - The minimum level errors from other files to consider for inclusion in the - current buffer. - - If set to an error level, only display errors from other files whose error - level is at least as severe as this one. If ``nil``, display all errors from - other files. - -To never show any errors from other files, set -`flycheck-relevant-error-other-file-show` to ``nil``. - -.. defcustom:: flycheck-relevant-error-other-file-show - - Whether to show errors from other files. - -Explain errors -============== - -Flycheck also has the ability to display explanations for errors, provided the -error checker is capable of producing these explanations. Currently, only the -`rust` and `rust-cargo` checkers produce explanations. - -.. define-key:: C-c ! e - M-x flycheck-explain-error-at-point - - Display an explanation for the first explainable error at point. - - -Kill errors -=========== - -You can put errors into the kill ring with `C-c ! w`: - -.. define-key:: C-c ! C-w - M-x flycheck-copy-errors-as-kill - - Copy all messages of the errors at point into the kill ring. - -.. define-key:: C-u C-c ! C-w - C-u M-x flycheck-copy-errors-as-kill - - Like `C-c ! w` but with error IDs. - -.. define-key:: M-0 C-c ! C-w - M-0 M-x flycheck-copy-errors-as-kill - - Like `C-c ! w` but do not copy the error messages but only the error IDs. diff --git a/emacs.d/vendor/flycheck/doc/user/error-list.rst b/emacs.d/vendor/flycheck/doc/user/error-list.rst deleted file mode 100644 index a51c53d..0000000 --- a/emacs.d/vendor/flycheck/doc/user/error-list.rst +++ /dev/null @@ -1,98 +0,0 @@ -.. _flycheck-error-list: - -================= - List all errors -================= - -You can see all errors in the current buffer in Flycheck’s error list: - -.. image:: /images/flycheck-error-list.png - :align: center - -The key `C-c ! l` pops up the error list: - -.. define-key:: C-c ! l - M-x flycheck-list-errors - M-x list-flycheck-errors - - Pop up a list of errors in the current buffer. - -The error list automatically updates itself after every syntax check and follows -the current buffer: If you switch to different buffer or window it automatically -shows the errors of the now current buffer. The buffer whose errors are shown -in the error list is the *source buffer*. - -Whenever the point is on an error in the *source buffer* the error list -highlights these errors—the green line in the screenshot above. - -Within the error list the following key bindings are available: - -========== ==== -:kbd:`RET` Go to the current error in the source buffer -:kbd:`n` Jump to the next error -:kbd:`p` Jump to the previous error -:kbd:`e` Explain the error -:kbd:`f` Filter the error list by level -:kbd:`F` Remove the filter -:kbd:`S` Sort the error list by the column at point -:kbd:`g` Check the source buffer and update the error list -:kbd:`q` Quit the error list and hide its window -========== ==== - -Filter the list -=============== - -By the default the error list shows all errors but sometimes you'd like to hide -warnings to focus only on real errors. The error list lets you hide all errors -below a certain level with :kbd:`f`. This key prompts for an error level and -will remove all errors of lower levels from the list. The filter is permanent -as long as the error list buffer stays alive or the filter is reset with -:kbd:`F`. - -Sort the list -============= - -You can press :kbd:`S` or click on the column headings to sort the error list by -any of the following columns: - -* Line -* Level -* ID -* Message and checker - -Click twice or press :kbd:`S` repeatedly to flip the sort order from ascending -to descending or vice versa. - -Tune error list display -======================= - -By default the error list buffer pops up like any other buffer. Flycheck does -not enforce special rules on how it's displayed and where it's located in the -frame so essentially the error list pops up at arbitrary places wherever Emacs -can find a window for it. - -However you can tell Emacs to obey certain rules when displaying buffers by -customizing the built-in option `display-buffer-alist`. You can use this option -to make the error list display like similar lists in contemporary IDEs like -VisualStudio, Eclipse, etc. with the following code in your :term:`init file`: - -.. code-block:: elisp - - (add-to-list 'display-buffer-alist - `(,(rx bos "*Flycheck errors*" eos) - (display-buffer-reuse-window - display-buffer-in-side-window) - (side . bottom) - (reusable-frames . visible) - (window-height . 0.33))) - -This display rule tells Emacs to always display the error list at the bottom -side of the frame, occupying a third of the entire height of the frame. - -.. seealso:: - - Shackle_ - An Emacs package which provides an alternative way to control buffer - display - -.. _shackle: https://github.com/wasamasa/shackle diff --git a/emacs.d/vendor/flycheck/doc/user/error-reports.rst b/emacs.d/vendor/flycheck/doc/user/error-reports.rst deleted file mode 100644 index 46fbf2c..0000000 --- a/emacs.d/vendor/flycheck/doc/user/error-reports.rst +++ /dev/null @@ -1,317 +0,0 @@ -======================= - See errors in buffers -======================= - -When a syntax check in the current buffer has finished Flycheck reports the -results of the check in the current buffer in two ways: - -* Highlight errors, warnings, etc. directly in the buffer according to - `flycheck-highlighting-mode` and `flycheck-highlighting-style`. -* Indicate errors, warnings, etc. in the fringe according to - `flycheck-indication-mode`. - -Additionally Flycheck indicates its current state and the number of errors and -warnings in the mode line. - -The following screenshot illustrates how this looks like in the default Emacs -color theme. It shows an info, a warning and an error annotation, from top to -bottom. Please also note the fringe indicators on the left side and the -emphasized mode line indicator in the bottom right corner: - -.. image:: /images/flycheck-error-reports.png - :alt: Flycheck showing info, warning and error annotations - :align: center - -.. note:: - - The colours of fringe icons and the whole appearance of the error highlights - depend on the active color theme. Although red, orange and green or blue - seem to be somewhat standard colours for Flycheck’s annotations across many - popular themes, please take a closer look at your color theme if you’re in - doubt about the meaning of a Flycheck highlight. - -Error levels -============ - -All errors that syntax checkers report have a *level* which tells you the -severity of the error. Flycheck has three built-in levels: - -``error`` - Severe errors like syntax or type errors. - -``warning`` - Potential but not fatal mistakes which you should likely fix nonetheless. - -``info`` - Purely informational messages which inform about notable things in the - current buffer, or provide additional help to fix errors or warnings. - -Each error level has a distinct highlighting and colour which helps you to -identify the severity of each error right in the buffer. - -Error highlights -================ - -Flycheck highlights errors directly in the buffer according to -`flycheck-highlighting-mode` and `flycheck-highlighting-style`. - -Most checkers report a single error position, not a range, so Flycheck typically -needs to guess how far to extend the highlighting: by default, it highlights the -whole symbol at the location reported by the checker, as in the screenshot -above, but you can change that range (or even disable highlighting completely) -using `flycheck-highlighting-mode`. - -.. defcustom:: flycheck-highlighting-mode - - How Flycheck chooses which buffer region to highlight: - - ``nil`` - Do not highlight anything at all. - - ``lines`` - Highlight the whole line and discard any information about the column. - - ``columns`` - Highlight the column of the error if any, otherwise like ``lines``. - - ``symbols`` - Highlight the entire symbol around the error column if any, otherwise like - ``columns``. This is this default. - - ``sexps`` - Highlight the entire expression around the error column if any, otherwise - like ``columns``. - - .. warning:: - - In some major modes ``sexps`` is *very* slow, because discovering - expression boundaries is costly. - - The built-in ``python-mode`` is known to suffer from this issue. - - Be careful when enabling this mode. - -Conversely, when a checker reports a range, Flycheck uses that. - -The style of the highlighting is determined by the value of -`flycheck-highlighting-style`. By default, Flycheck highlights error text with -a face indicating the severity of the error (typically, this face applies a -coloured wavy underline). Instead of faces, however, Flycheck can also indicate -erroneous text by inserting delimiters around it (checkers sometimes report -errors that span a large region of the buffer, making underlines distracting, so -in fact Flycheck only applies a face if the error spans less than 5 lines; this -is achieved using the ``conditional`` style described below). - -.. defcustom:: flycheck-highlighting-style - - How Flycheck highlights error regions. - - ``nil`` - Do not indicate error regions. - - ``level-face`` - Apply a face to erroneous text. - - ``(delimiters BEFORE AFTER)`` - Bracket the error text between ``BEFORE`` and ``AFTER``, which can be - strings, images, etc. Chars are handled specially: they are repeated - twice to form double brackets. - - ``(conditional NLINES S1 S2)`` - Chose between styles ``S1`` and ``S2``: ``S1`` if the error covers up to - ``NLINES``, and ``S2`` otherwise. - -To change the style of the underline or use different colours in the -``level-face`` style, customize the following faces, which are used depending on -the error level: - -.. defface:: flycheck-error - flycheck-warning - flycheck-info - - The highlighting face for ``error``, ``warning`` and ``info`` levels - respectively. - -Delimiters use the same faces as the fringe icons described below, in addition -to the `flycheck-error-delimiter` face; delimited text has the -`flycheck-delimited-error` face, which is empty by default. - -.. defface:: flycheck-error-delimiter - - The face applied to ``BEFORE`` and ``AFTER`` delimiters. - -.. defface:: flycheck-delimited-error - - The face applied to error text in ``delimiters`` style. - -Fringe and margin icons -======================= - -In GUI frames, Flycheck also adds indicators to the fringe—the left or right -border of an Emacs window—to help you identify erroneous lines quickly. -These indicators consist of a rightward-pointing double arrow shape coloured in -the colour of the corresponding error level. By default the arrow is 8 pixels -wide, but a 16 pixels version is used if the fringe is `wide enough -`_. - -.. note:: - - Flycheck extensions can define custom error levels with different fringe - indicators. Furthermore some Emacs distributions like Spacemacs redefine - Flycheck’s error levels to use different indicators. If you're using such a - distribution please take a look at its documentation if you're unsure about - the appearance of Flycheck's indicators. - -You can customise the location of these indicators (left or right fringe) with -`flycheck-indication-mode`, which also lets you turn off these indicators -completely; additionally, you can move these indicators into the margins instead -of the fringes: - -.. defcustom:: flycheck-indication-mode - - How Flycheck indicates errors and warnings in the buffer fringes: - - ``left-fringe`` or ``right-fringe`` - Use the left or right fringe respectively. Fringes can only contain - monochrome bitmaps, so Flycheck draws small pixel-art arrows. - - ``left-margin`` or ``right-margin`` - Use the left or right margin respectively. Margins can support all of - Emacs' rendering facilities, so Flycheck uses the ``»`` character, which - scales with the font size. - - ``nil`` - Do not indicate errors and warnings in the fringe or in the margin. - -By default, Emacs displays fringes, but not margins. With ``left-margin`` and -``right-margin`` indication modes, you will need to enable margins in your -``.emacs``. For example: - -.. code-block:: elisp - - (setq-default left-fringe-width 1 right-fringe-width 8 - left-margin-width 1 right-margin-width 0) - -If you intend to use margins only with Flycheck, consider using -``flycheck-set-indication-mode`` in a hook instead; this function adjusts -margins and fringes for the current buffer. - -.. code-block:: elisp - - (setq-default flycheck-indication-mode 'left-margin) - (add-hook 'flycheck-mode-hook #'flycheck-set-indication-mode) - -That function sets fringes and margins to reasonable (but opinionated) defaults, -according to ``flycheck-indication-mode``. To set your own margin and fringe -widths, use a hook and call ``flycheck-refresh-fringes-and-margins``, like this: - -.. code-block:: elisp - - ;; Show indicators in the left margin - (setq flycheck-indication-mode 'left-margin) - - ;; Adjust margins and fringe widths… - (defun my/set-flycheck-margins () - (setq left-fringe-width 8 right-fringe-width 8 - left-margin-width 1 right-margin-width 0) - (flycheck-refresh-fringes-and-margins)) - - ;; …every time Flycheck is activated in a new buffer - (add-hook 'flycheck-mode-hook #'my/set-flycheck-margins) - -The following faces control the colours of fringe and margin indicators. - -.. defface:: flycheck-fringe-error - flycheck-fringe-warning - flycheck-fringe-info - - The icon faces for ``error``, ``warning`` and ``info`` levels respectively. - -When an error spans multiple lines, Flycheck displays a hatch pattern in the -fringes or vertical dots in the margins to indicate the extent of the error. - -To change the fringe bitmap or the symbol used in the margins, use the function -``flycheck-redefine-standard-error-levels``. - -Mode line -========= - -Like all minor modes Flycheck also has a mode line indicator. You can see it in -the bottom right corner of the above screenshot. By default the indicator shows -Flycheck’s current state via one of the following texts: - -+-------------+----------------------------------------------------------------+ -|``FlyC*`` |Flycheck is checking the buffer currently. | -+-------------+----------------------------------------------------------------+ -|``FlyC`` |There are no errors or warnings in the current buffer. | -+-------------+----------------------------------------------------------------+ -|``FlyC:3/5`` |There are three errors and five warnings in the current buffer. | -+-------------+----------------------------------------------------------------+ -|``FlyC-`` |Flycheck did not find a syntax checker for the current buffer. | -| |Take a look at the :ref:`list of supported languages | -| |` and type `C-c ! v` to see what checkers | -| |are available for the current buffer. | -+-------------+----------------------------------------------------------------+ -|``FlyC!`` |The last syntax check failed. Inspect the ``*Messages*`` buffer| -| |look for error messages, and consider :ref:`reporting a bug | -| |`. | -+-------------+----------------------------------------------------------------+ -|``FlyC?`` |The last syntax check had a dubious result. The definition of a| -| |syntax checker may have a bug. Inspect the ``*Messages*`` | -| |buffer and consider :ref:`reporting a bug | -| |`. | -+-------------+----------------------------------------------------------------+ - -You can entirely customise the mode line indicator with `flycheck-mode-line`: - -.. defcustom:: flycheck-mode-line - - A “mode line construct” for Flycheck’s mode line indicator. - -.. seealso:: - - :infonode:`(elisp)Mode Line Data` - Documentation of mode line constructs. - flycheck-status-emoji_ - A Flycheck extension which puts emojis into Flycheck's mode line - indicator. - :flyc:`flycheck-color-mode-line` - A Flycheck extension which colours the entire mode line according to - Flycheck's status. - -.. _flycheck-status-emoji: https://github.com/liblit/flycheck-status-emoji - -Error thresholds -================ - -To avoid flooding a buffers with excessive highlighting, cluttering the -appearance and slowing down Emacs, Flycheck takes precautions against syntax -checkers that report a large number of errors exceeding -`flycheck-checker-error-threshold`: - -.. defcustom:: flycheck-checker-error-threshold - - The maximum number of errors a syntax checker is allowed to report. - - If a syntax checker reports more errors the error information is - **discarded**. To not run into the same issue again on the next syntax check - the syntax checker is automatically added to `flycheck-disabled-checkers` in - this case to disable it for the next syntax check. - -Clear results -============= - -You can explicitly remove all highlighting and indication and all error -information from a buffer: - -.. define-key:: C-c ! C - M-x flycheck-clear - - Clear all reported errors, all highlighting and all indication icons from the - current buffer. - -.. define-key:: C-u C-c ! C - C-u M-x flycheck-clear - - Like `C-c ! C` but also interrupt any syntax check currently running. Use - this command if you think that Flycheck is stuck. diff --git a/emacs.d/vendor/flycheck/doc/user/flycheck-versus-flymake.rst b/emacs.d/vendor/flycheck/doc/user/flycheck-versus-flymake.rst deleted file mode 100644 index 4d8b35c..0000000 --- a/emacs.d/vendor/flycheck/doc/user/flycheck-versus-flymake.rst +++ /dev/null @@ -1,290 +0,0 @@ -.. _flycheck-versus-flymake: - -========================= - Flycheck versus Flymake -========================= - -This article compares Flycheck to the *built-in* Flymake mode. It does not -consider third-party extensions such as flymake-easy_, but references them at -appropriate places. - -We aim for this comparison to be fair and comprehensive, but it may contain -stale information. Please report any inaccuracy you might find, and feel free -to `edit this page`_ and improve it. - -.. note:: - - This comparison was updated at the time of the Emacs 26.1 release, which - contains an overhaul of Flymake. If you are using Emacs 25.3 or below, you - can still access the comparison between Flycheck and the legacy Flymake - `here`_. - -.. _flymake-easy: https://github.com/purcell/flymake-easy -.. _edit this page: https://github.com/flycheck/flycheck/edit/master/doc/user/flycheck-versus-flymake.rst -.. _here: /en/31/ - -Overview -======== - -This table gives an overview of the differences and similarities between -Flycheck and Flymake. The rest of this page describes each point in more -detail. - -+---------------------------+-----------------------+-----------------------+ -| |Flycheck |Flymake | -+===========================+=======================+=======================+ -|Supports Emacs versions ||min-emacs| |26.1+ | -+---------------------------+-----------------------+-----------------------+ -|Built-in |no |yes | -+---------------------------+-----------------------+-----------------------+ -|`Supported languages`_ |100+ built-in, |10 built-in, | -| |200+ w/ 3rd-party |50+ w/ 3rd party | -+---------------------------+-----------------------+-----------------------+ -|`Automatic syntax |built-in |manual | -|checking`_ | | | -+---------------------------+-----------------------+-----------------------+ -|Check triggers |save, newline, change, |save, newline, change | -| |buffer switch | | -+---------------------------+-----------------------+-----------------------+ -|Asynchronous checking |yes, always |yes, for some modes | -+---------------------------+-----------------------+-----------------------+ -|`Automatic syntax checker |by major mode and |no | -|selection `_ | | | -+---------------------------+-----------------------+-----------------------+ -|`Multiple syntax checkers |yes (configurable |yes (all at once) | -|per buffer`_ |chain) | | -+---------------------------+-----------------------+-----------------------+ -|`Definition of new |single declarative |arbitrary function | -|syntax checkers`_ |macro |[#]_ | -+---------------------------+-----------------------+-----------------------+ -|Configuration debugging |built-in (C-c ! v) |none | -+---------------------------+-----------------------+-----------------------+ -|`Error identifiers`_ |yes |no | -+---------------------------+-----------------------+-----------------------+ -|`Error explanations`_ |yes |no | -+---------------------------+-----------------------+-----------------------+ -|`Error parsing helpers |for regexp, JSON and |none | -|`_ |XML | | -+---------------------------+-----------------------+-----------------------+ -|Fringe icons for errors |yes |yes | -+---------------------------+-----------------------+-----------------------+ -|Error highlighting |faces, brackets, mixed |faces only | -+---------------------------+-----------------------+-----------------------+ -|`Error indicators |fringes (incl HiDPI), |fringes only | -|`_ |margins | | -+---------------------------+-----------------------+-----------------------+ -|`Error message display`_ |tooltip, echo area, |tooltip, echo area | -| |fully customizable | | -| |(e.g. tooltip, popup | | -| |w/ 3rd party packages) | | -+---------------------------+-----------------------+-----------------------+ -|List of all errors |yes; filterable by |yes | -| |error level | | -+---------------------------+-----------------------+-----------------------+ - -Detailed review -=============== - -Relation to Emacs ------------------ - -**Flymake** has been part of GNU Emacs since GNU Emacs 22. As such, -contributions to Flymake are subject to the FSF policies on GNU projects. Most -notably, contributors are required to assign their copyright to the FSF. - -**Flycheck** is not part of GNU Emacs. However, it is free software as well, -and publicly developed on the well-known code hosting platform :gh:`Github -`. Contributing to Flycheck does not require a copyright -assignment, only an explicit agreement that your contributions will be licensed -under the GPL. - -Automatic syntax checking -------------------------- - -**Flymake** is not enabled automatically for supported languages. It must be -enabled for each mode individually, or by, e.g., adding to a hook that enables -it for all ``prog-mode`` buffers. If no backends for the major mode are -available, Flymake will non-intrusively tell you in the modeline. - -**Flycheck** provides a global mode `global-flycheck-mode` which enables syntax -checking in every supported language, where it is safe to do so (remote and -encrypted buffers are excluded by default). - -Syntax checkers ---------------- - -Supported languages -~~~~~~~~~~~~~~~~~~~ - -**Flymake** comes with support for Emacs Lisp, Ruby (``ruby`` for syntax check -and ``rubocop`` for lints), Python and Perl. In addition, backends written for -the legacy Flymake are compatible with the new implementation. - -**Flycheck** provides support for `over 50 languages ` with -over 100 syntax checkers, most of them contributed by the community. - -Definition of new syntax checkers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**Flymake** backends are single functions which report diagnostics to a callback -function given as argument. - -**Flycheck** provides a single function `flycheck-define-checker` to define a -new syntax checker. This function uses a declarative syntax which is easy to -understand even for users unfamiliar with Emacs Lisp. In fact, most syntax -checkers in Flycheck were contributed by the community. - -For example, the Perl checker in Flycheck is defined as follows: - -.. code-block:: elisp - - (flycheck-define-checker perl - "A Perl syntax checker using the Perl interpreter. - - See URL `http://www.perl.org'." - :command ("perl" "-w" "-c" source) - :error-patterns - ((error line-start (minimal-match (message)) - " at " (file-name) " line " line - (or "." (and ", " (zero-or-more not-newline))) line-end)) - :modes (perl-mode cperl-mode)) - -The whole process is described in :ref:`adding-a-checker`. - -Customization of syntax checkers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**Flymake** does not provide built-in means to customize syntax checkers. -Instead, when defining a new syntax checker the user needs to declare -customization variables explicitly and check their value in the init function. - -**Flycheck** provides built-in functions to add customization variables to -syntax checkers and splice the value of these variables into the argument list -of a syntax checking tool. Many syntax checkers in Flycheck provide -customization variables. For instance, you can customize the enabled warnings -for C with `flycheck-clang-warnings`. Flycheck also tries to automatically find -configuration files for syntax checkers. - -Executables of syntax checkers -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**Flymake** does not provide built-in means to change the executable of a syntax -checker. - -**Flycheck** defines a variable to set the path of a syntax checker tool for -each defined syntax checker and provides the interactive command -`flycheck-set-checker-executable` to change the executable used in a buffer. -The process used to locate checker configuration files can also be customized -using `flycheck-locate-config-file-functions`, allowing you to store your -personal checker configuration files in your ``.emacs.d`` folder. - -Syntax checker selection ------------------------- - -**Flymake** runs all functions added to the `flymake-diagnostic-functions` hook. - -**Flycheck** uses the major mode and checker-specific predicates to - automatically select a syntax checker. - -Custom predicates -~~~~~~~~~~~~~~~~~ - -**Flymake** may allow for backends to implement custom logic to decide whether -to run the check or not. There are no easily-defined predicate functions. - -**Flycheck** supports custom predicate functions. For instance, Emacs uses -a single major mode for various shell script types (e.g. Bash, Zsh, POSIX Shell, -etc.), so Flycheck additionally uses a custom predicate to look at the value of -the variable `sh-shell` in Sh Mode buffers to determine which shell to use for -syntax checking. - -Manual selection -~~~~~~~~~~~~~~~~ - -**Flymake** users may manually select a specific backend by overriding the value -of the backends list. - -**Flycheck** provides the local variable `flycheck-checker` to explicitly use a -specific syntax checker for a buffer and the command `flycheck-select-checker` -to set this variable interactively. - -Multiple syntax checkers per buffer -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**Flymake** will use all the backends added to the -`flymake-diagnostic-functions` hook to check a buffer; all backends are started -at the same time, but errors are reported in the buffer as soon as a backend -returns them. Backends can also be written to first report errors for the -visible region of the buffer, and collect errors for hidden regions later. - -**Flycheck** can also apply multiple syntax checkers per buffer, but checkers -run in sequence rather than concurrently. For instance, Flycheck will check PHP -files with PHP CLI first to find syntax errors, then with PHP MessDetector to -additionally find idiomatic and semantic errors, and eventually with PHP -CheckStyle to find stylistic errors. The user will see all errors reported by -all of these tools in the buffer. These checker-chains are configurable (see -:ref:`flycheck-checker-chains`), so it's possible to run an advanced style -checker only if a basic syntax checker returned no errors (this avoids -accumulating too many false positives and improves performance). - -Errors ------- - -Error identifiers -~~~~~~~~~~~~~~~~~ - -**Flymake** does not include special treatment for error identifiers. - -**Flycheck** supports identifiers for different kinds of errors, if a syntax -checker provides these. The identifiers appear in the error list and in error -display, and can be copied independently, for instance for use in an inline -suppression comment or to search the web for a particular kind of error. - -Error explanations -~~~~~~~~~~~~~~~~~~ - -Some **Flycheck** checkers can use error identifiers to provide error -explanations in an help buffer (see `flycheck-explain-error-at-point`). - -.. _margins: - -Error indicators -~~~~~~~~~~~~~~~~ - -Both **Flymake** and **Flycheck** indicate errors in the buffer (using overlays) -and in the fringes. Flycheck includes fringe bitmaps for HiDPI screens, and -also supports displaying indicators in the margins instead of the fringes (this -behavior can be customized using `flycheck-indication-mode`, and -`flycheck-highlighting-mode`). - -Error parsing -~~~~~~~~~~~~~ - -**Flymake** lets backend parse error messages from -tools. There are no built-in helpers for defining error patterns, or for -parsing JSON or XML formats. - -**Flycheck** checkers can use regular expressions as well as custom parsing functions. -The preferred way to define a checker is to use the `rx` syntax, extended with -custom forms for readable error patterns. Flycheck includes some ready-to-use -parsing functions for common output formats, such as Checkstyle XML, or JSON -interleaved with plain text. - -Error message display -~~~~~~~~~~~~~~~~~~~~~ - -**Flymake** shows error messages in a tool tip if the user hovers -the mouse over an error location, or in the echo area if the user navigates to -the error with `flymake-goto-next-error`. - -**Flycheck** shows error message in tool tips as well, and also displays error -messages in the echo area if the point is at an error location. This feature is -fully customizable via `flycheck-display-errors-function`, and several -`extensions ` already provide alternative way to display -errors. - -.. rubric:: Footnotes - -.. [#] `flymake-easy`_ provides a function to define a new syntax checker, which - sets all required variables at once. diff --git a/emacs.d/vendor/flycheck/doc/user/installation.rst b/emacs.d/vendor/flycheck/doc/user/installation.rst deleted file mode 100644 index f876f32..0000000 --- a/emacs.d/vendor/flycheck/doc/user/installation.rst +++ /dev/null @@ -1,146 +0,0 @@ -.. _flycheck-installation: - -============== - Installation -============== - -This document gives you detailed instructions and information about installing -Flycheck. - -Prerequisites -============= - -Flycheck needs GNU Emacs |min-emacs| and works best on Unix-like systems like -Linux or macOS. It does not support older releases of GNU Emacs or other -flavours of Emacs (e.g. XEmacs, Aquamacs, etc.). - -.. _flycheck-windows-support: - -Windows support ---------------- - -**Flycheck does not explicitly support Windows**, but tries to maintain Windows -compatibility and should generally work fine on Windows, too. However, we can -neither answer questions about Windows nor fix bugs that only occur on Windows -without the help of active Windows users. Please watch out for `known Windows -issues`_. - -.. _known Windows issues: https://github.com/flycheck/flycheck/labels/arch%3A%20windows%20only - -Syntax checking tools ---------------------- - -Flycheck does not check buffers itself but relies on *external* programs to -check buffers. These programs must be installed separately. Please take a look -at the :ref:`list of supported languages ` to find out what -tools are required for a particular language. - -Many of these programs are available in the package repositories of Linux -distributions or in Homebrew_ for macOS. Others can be installed with standard -package managers such as Rubygems, NPM, Cabal, etc. - -.. important:: - - For a GUI Emacs on MacOS we recommend to install and configure - exec-path-from-shell_ to make Emacs use the proper ``$PATH`` and avoid a - :ref:`common setup issue on MacOS `. - -.. _Homebrew: https://brew.sh -.. _exec-path-from-shell: https://github.com/purcell/exec-path-from-shell - -.. _flycheck-package-installation: - -Package installation -==================== - -We recommend to install Flycheck with Emacs' built-in package manager. Flycheck -is available in the popular `MELPA`_ archive which serves up to date snapshots -of Flycheck's development state. We recommend to read through the -:doc:`changelog ` before every upgrade to check for any breaking -changes that might affect you. - -.. note:: - - The sibling repository `MELPA Stable`_ provides packages for Flycheck - releases. If you prefer to follow the most recent changes use MELPA instead, - but be aware that, while we try to be careful about the stability of the - development snapshots, we may make breaking changes anytime without prior - announcement. - -Unfortunately the MELPA repositories are not available in Emacs by default. You -must explicitly add them to `package-archives` with the following code in your -:term:`init file`: - -.. code-block:: elisp - - (require 'package) - - (add-to-list 'package-archives - '("MELPA Stable" . "https://stable.melpa.org/packages/") t) - (package-initialize) - -This adds MELPA Stable; for MELPA replace ``https://stable.melpa.org`` with -``https://melpa.org`` and change the name accordingly. If you do not know where -your init file is inspect the value of `user-init-file` with :kbd:`C-h v -user-init-file`. - -Once the repository is set up you can install Flycheck from Emacs' package menu -at :kbd:`M-x list-packages`, or directly with :kbd:`M-x package-install RET -flycheck`. - -use-package ------------ - -You may want to take a look at `use-package`_ which provides simple syntax to -declare and configure packages in your init file. Specifically it allows to -automatically install missing packages from package archive when Emacs starts. - -Add the following form to your init file to setup Flycheck with `use-package`_: - -.. code-block:: elisp - - (use-package flycheck - :ensure t - :init (global-flycheck-mode)) - -Then press :kbd:`C-M-x` with point somewhere in this form to install and enable -Flycheck for the current Emacs session. - -.. _flycheck-distribution-packages: - -Distribution packages ---------------------- - -Alternatively some distributions provide binary packages of Flycheck. We -officially support the following distributions: - -* Debian 9 and newer: ``apt-get install elpa-flycheck flycheck-doc`` (the latter - for our manual). The `Debian Emacs addon team`_ provides these packages. - -.. _Debian Emacs addon team: https://pkg-emacsen.alioth.debian.org/ - -.. _flycheck-legacy-installation-methods: - -Legacy installation methods -=========================== - -Some users prefer to install Flycheck with legacy methods such as el-get, Git -submodules, etc that were common before Emacs included a package manager. There -are also many 3rd party packages provided by various package managers. We do -neither support nor endorse any of these: - -.. warning:: - - If you install Flycheck in any way other than :ref:`our official packages - ` you do so **at your own risk**. - -Please beware of breakage, and understand that while we do not actively work -against alternative installation methods we will not make compromises to support -alternative installation methods. We will close issues reported for alternative -installation if we fail to reproduce them with a proper installation of -Flycheck. - -.. _MELPA: https://melpa.org -.. _MELPA Stable: https://stable.melpa.org -.. _Getting Started: https://melpa.org/#/getting-started -.. _use-package: https://github.com/jwiegley/use-package diff --git a/emacs.d/vendor/flycheck/doc/user/quickstart.rst b/emacs.d/vendor/flycheck/doc/user/quickstart.rst deleted file mode 100644 index 8b7a831..0000000 --- a/emacs.d/vendor/flycheck/doc/user/quickstart.rst +++ /dev/null @@ -1,80 +0,0 @@ -.. _flycheck-quickstart: - -============ - Quickstart -============ - -This page gives a quick introduction into Flycheck and an overview of its most -important features. Before you start here please make sure that Flycheck is -:ref:`installed `. - -Enable Flycheck -=============== - -Now add the following code to your :term:`init file` to permanently enable -syntax checking with Flycheck: - -.. code-block:: elisp - - (add-hook 'after-init-hook #'global-flycheck-mode) - -Install syntax checker programs -=============================== - -Now you need to install syntax checking programs for the languages you'd like to -use Flycheck with. The :ref:`list of supported languages ` -tells you which languages Flycheck supports and what programs it uses. - -For instance, you can install Pylint_ for Python and ESLint_ for Javascript: - -.. code-block:: shell - - $ pip install pylint - $ npm install eslint - -.. _Pylint: https://pylint.org -.. _ESLint: https://eslint.org - -Check syntax in a buffer -======================== - -Now you are ready to use Flycheck in a Python or Javascript buffer. Visit a -Python or Javascript file and check whether your Flycheck setup is complete with -`C-c ! v`. - -If everything is green, Flycheck will now start to check the buffer on the fly -while you are editing. Whenever you make a mistake that eslint or Pylint can -catch, Flycheck will highlight the corresponding place in the buffer with an -error underline whose color reflects the severity of the issue. Additionally, -Flycheck will put a symbol into the fringe for affected lines and show the total -number of errors and warnings in the buffer in the mode line. - -Navigate and list errors -======================== - -With `C-c ! n` and `C-c ! p` you can now jump back and forth between erroneous -places. If you keep on such a place for a little while Flycheck will show the -corresponding error message in the each area. Likewise, if you hover such a -place with the mouse cursor Flycheck will show the error message in a tooltip. - -Press `C-c ! l` to pop up a list of all errors in the current buffer. This list -automatically updates itself when you fix errors or introduce new ones, and -follows the currently selected buffer. If the error list is selected you can -type :kbd:`n` and :kbd:`p` to move up and down between errors and jump to their -corresponding location in the buffer. - -More features -============= - -All Flycheck commands are available in the Emacs Menu at :menuselection:`Tools ----> Syntax checking`: - -.. figure:: /images/flycheck-menu.png - - The menu of Flycheck, showing all available Flycheck commands - -The same menu also pops up when you click on the mode line lighter: - -.. figure:: /images/flycheck-mode-line-menu.png - - The mode line menu of Flycheck diff --git a/emacs.d/vendor/flycheck/doc/user/syntax-checkers.rst b/emacs.d/vendor/flycheck/doc/user/syntax-checkers.rst deleted file mode 100644 index 753342c..0000000 --- a/emacs.d/vendor/flycheck/doc/user/syntax-checkers.rst +++ /dev/null @@ -1,330 +0,0 @@ -================= - Syntax checkers -================= - -Flycheck does not check buffers on its own. Instead it delegates this task to -external *syntax checkers* which are external programs or services that receive -the contents of the current buffer and return a list of errors in the buffer, -together with metadata that tells Flycheck how to run the program, how to pass -buffer contents to it, and how to extract errors. - -.. seealso:: - - :ref:`flycheck-languages` - A complete list of all syntax checkers included in Flycheck - -Like everything else in Emacs syntax checkers have online documentation which -you can access with `C-c ! ?`: - -.. define-key:: C-c ! ? - M-x flycheck-describe-checker - - Prompt for the name of a syntax checker and pop up a Help buffer with its - documentation. - - The documentation includes the name of the program or service used, a list of - major modes the checker supports and a list of all options for this syntax - checker. - -.. _flycheck-automatic-selection: - -Select syntax checkers automatically -==================================== - -Normally Flycheck automatically selects the best syntax checkers for the current -buffer from `flycheck-checkers` whenever it needs to check the buffer: - -.. defcustom:: flycheck-checkers - - A list of all syntax checkers available for syntax checking. - - A syntax checker in this list is a :term:`registered syntax checker`. - -Flycheck picks the first syntax checker from this list which exists and supports -the current major mode, and runs it over the current buffer. When the checker -has finished, Flycheck looks for the next syntax checker to run, and if there is -one, Flycheck runs the next syntax checker, and so on, until there is no more -syntax checker for the current buffer. This process repeats whenever Flycheck -needs to check the buffer according to `flycheck-check-syntax-automatically`. - -.. important:: - - Under some circumstances—for instance if the syntax checker is not installed— - Flycheck automatically :ref:`disables syntax checkers - ` in the current buffer and will thus not even - consider them in any future checks in the current buffer. - - In the `verification buffer ` these syntax checkers are marked as - “disabled” just as if you had disabled them manually with `C-c ! x`, and - likewise you can re-enable automatically disabled syntax checkers with `C-u - C-c ! x`. - -For instance, the first syntax checker for Emacs Lisp is `emacs-lisp` which -checks Emacs Lisp with Emacs' own byte compiler. This syntax checker asks for -`emacs-lisp-checkdoc` to run next, which checks for stylistic issues in Emacs -Lisp docstrings. Thus Flycheck will first run the byte compiler and then -checkdoc in an Emacs Lisp buffer. - -.. _flycheck-manual-selection: - -Select syntax checkers manually -=============================== - -Alternatively you can tell Flycheck explicitly which syntax checker to start -with in the current buffer: - -.. define-key:: C-c ! s - M-x flycheck-select-checker - - Prompt for a syntax checker and use this syntax checker as the first syntax - checker for the current buffer. - - Flycheck may still run further syntax checkers from `flycheck-checkers` if - the selected syntax checker asks for it. - -Flycheck will use the selected syntax checker as “entry point” for syntax checks -in the current buffer, just as if it had selected this syntax checker -automatically. It will automatically run further syntax checkers from -`flycheck-checkers` if the selected syntax checker asks for it. - -Under the hood `C-c ! s` sets `flycheck-checker`: - -.. defvar:: flycheck-checker - - The name of a syntax checker to use for the current buffer. - - If ``nil`` (the default) let Flycheck :ref:`automatically select - ` the best syntax checker from - `flycheck-checkers`. - - If set to a syntax checker Flycheck will use this syntax checker as the first - one in the current buffer, and run subsequent syntax checkers just as if it - had selected this one automatically. - - If the syntax checker in this variable does not work in the current buffer - signal an error. - - This variable is buffer-local. - -We recommend to set `flycheck-checker` via directory local variables to enforce -a specific syntax checker for a project. For instance, Flycheck usually prefers -`javascript-eslint` for Javascript buffers, but if your project uses -`javascript-jshint` instead you can tell Flycheck to use `javascript-jshint` for -all Javascript buffers of your project with the following command in the -top-level directory of your project: :kbd:`M-x add-dir-local-variable RET -js-mode RET flycheck-checker RET javascript-jshint`. A new buffer pops up that -shows the newly created entry in the directory variables. Save this buffer and -kill it. From now on Flycheck will check all Javascript files of this project -with JSHint. - -.. seealso:: - - :infonode:`(emacs)Locals` - General information about local variables. - - :infonode:`(emacs)Directory Variables` - Information about directory variables. - -To go back to automatic selection either set `flycheck-checker` to ``nil`` or -type `C-u C-c ! s`: - -.. define-key:: C-u C-c ! s - C-u M-x flycheck-select-checker - - Remove any selected syntax checker and let Flycheck again :ref:`select a - syntax checker automatically `. - -.. _flycheck-disable-checkers: - -Disable syntax checkers -======================= - -Even if you :ref:`select a checker manually ` -Flycheck may still use a syntax checker that you’d not like to use. To -completely opt out from a specific syntax checker disable it: - -.. define-key:: C-c ! x - M-x flycheck-disable-checker - - Prompt for a syntax checker to disable in the current buffer. - -For instance if you do not care for documentation conventions of Emacs Lisp you -can opt out from `emacs-lisp-checkdoc` which checks your code against these -conventions with :kbd:`C-c ! x emacs-lisp-checkdoc`. After the next check all -checkdoc warnings will be gone from the buffer. - -Internally this command changes the buffer-local `flycheck-disabled-checkers`: - -.. defcustom:: flycheck-disabled-checkers - - A list of disabled syntax checkers. Flycheck will *never* use disabled - syntax checkers to check a buffer. - - This option is buffer-local. You can customise this variable with :kbd:`M-x - customize-variable RET flycheck-disabled-checkers` or set the default value - in your :term:`init file` to permanently disable specific syntax checkers. - For instance: - - .. code-block:: elisp - - (setq-default flycheck-disabled-checkers '(c/c++-clang)) - - will permanently disable `c/c++-clang` in all buffers. - -You can also disable syntax checkers per project with directory local variables. -For instance type :kbd:`M-x add-dir-local-variable RET emacs-lisp-mode RET -flycheck-disabled-checkers RET (emacs-lisp-checkdoc)` in your :term:`user emacs -directory` to disable `emacs-lisp-checkdoc` for all Emacs Lisp files in your -personal configuration. - -.. seealso:: - - :infonode:`(emacs)Locals` - General information about local variables. - - :infonode:`(emacs)Directory Variables` - Information about directory variables. - -To enable a disabled checker again, remove it from `flycheck-disabled-checkers` -or use `C-u C-c ! x`: - -.. define-key:: C-u C-c ! x - C-u M-x flycheck-disable-checker - - Prompt for a disabled syntax checker to enable again in the current buffer. - -.. _flycheck-checker-options: - -Configure syntax checkers -========================= - -Many syntax checkers provide command line flags to change their behaviour. -Flycheck wraps important flags as regular Emacs user options. - -The :ref:`list of supported languages ` includes all options -for each syntax checker. You can change these options in the Customize -interface under :menuselection:`programming --> tools --> flycheck --> -flycheck-options`, however we recommend to use Directory Variables to configure -syntax checkers per project. - -.. seealso:: - - :infonode:`(emacs)Directory Variables` - Information about directory variables. - -.. _flycheck-checker-config-files: - -Configuration files -------------------- - -Some syntax checkers can additionally read configuration from files. Flycheck -can find configuration files of syntax checkers and use them when invoking the -syntax checker program: - -.. defcustom:: flycheck-local-config-file-functions - - Functions to call to find a configuration file for a syntax checker. Each - function gets the name of a configuration file and shall return the absolute - path to a file if one exists. The default value leads to the following - steps: - - 1. If the name is an absolute path, use it. - 2. If the name exists in any ancestor directory, use the nearest one. - 3. If the name exists in ``$HOME``, use it. - - This option is an abnormal hook, see :infonode:`(elisp)Hooks`. - -Flycheck takes the names of configuration files from user options defined for -syntax checkers that support configuration files. Like above the :ref:`list of -languages ` also lists all supported configuration file -options. You can also change these in Customize, under -:menuselection:`programming --> tools --> flycheck --> flycheck-config-files`, -but again we recommend to use Directory Variables. - -We also recommend to prefer configuration files over options as you can usually -commit the configuration files to your source control repository to share them -with other contributors so that all contributors can use the same configuration -for syntax checking and linting. - -.. _flycheck-checker-executables: - -Change syntax checker executables -================================= - -Flycheck normally tries to run syntax checker tools by their standard name from -`exec-path`. Sometimes, though, you need to use a different version of a tool, -or probably don't even have a tool available globally—this frequently occurs in -Javascript project where dependencies including linter tools are typically -installed into a local ``node_modules`` directory: - -.. define-key:: M-x flycheck-set-checker-executable - - Prompt for a syntax checker and an executable file and make Flycheck use the - executable file for the syntax checker in the current buffer. - - Internally this command sets a variable named - :samp:`flycheck-{checker}-executable` where :samp:`{checker}` is the name of - the syntax checker entered on the prompt, e.g. `c/c++-clang`. - - Flycheck defines these :term:`executable options` for every syntax checker - that runs an external command. You can change these variables with directory - variables or set them in custom Emacs Lisp code such as mode hooks. - - .. seealso:: - - :infonode:`(emacs)Directory Variables` - Information about directory variables. - -.. _flycheck-checker-chains: - -Configuring checker chains -========================== - -In any given buffer where Flycheck is enabled, only one checker may be run at a -time. However, any number of checkers can be run in sequence. In such a -sequence, after the first checker has finished running and its errors have been -reported, the next checker of the sequence runs and its errors are reported, -etc. until there are no more checkers in the sequence. This sequence is called -a *checker chain*. - -Some checkers chains are already setup by default in Flycheck: e.g., -`emacs-lisp` will be followed by `emacs-lisp-checkdoc`, and `python-mypy` will -be followed by `python-flake8`. - -When defining a checker, you can specify which checkers may run after it by -setting the ``:next-checkers`` property (see the docstring of -`flycheck-define-generic-checker`). - -For a given checker, several next checkers may be specified. Flycheck will run -the first (in order of declaration) whose error level matches (see below) and -which can be used in the current buffer. - -You can also customize the next checker property by calling -`flycheck-add-next-checker` in your Emacs configuration file. - -.. defun:: flycheck-add-next-checker checker next &optional append - - Set *next* to run after *checker*. Both arguments are syntax checker - symbols. - - For example, the following will make `python-pylint` run after - `python-flake8`: - - .. code-block:: elisp - - (flycheck-add-next-checker 'python-flake8 'python-pylint) - - *Next* may also be a cons cell ``(level . next-checker)``, where - *next-checker* is a symbol denoting the syntax checker to run after - *checker*, and *level* is an error level. The *next-checker* will then only - be run if there is no current error whose level is more severe than *level*. - If *level* is ``t``, then *next-checker* is run regardless of the current - errors. - - For instance, if you wanted to run `python-pylint` only if `python-flake8` - produced no errors (only warnings and info diagnostics), then you would - rather use: - - .. code-block:: elisp - - (flycheck-add-next-checker 'python-flake8 '(warning . python-pylint)) diff --git a/emacs.d/vendor/flycheck/doc/user/syntax-checks.rst b/emacs.d/vendor/flycheck/doc/user/syntax-checks.rst deleted file mode 100644 index 9130b92..0000000 --- a/emacs.d/vendor/flycheck/doc/user/syntax-checks.rst +++ /dev/null @@ -1,145 +0,0 @@ -.. _flycheck-syntax-checks: - -=============== - Check buffers -=============== - -Flycheck provides two Emacs minor modes for automatic syntax checking: -:mode:`flycheck` to enable syntax checking in the current buffer, and -:mode:`global-flycheck` to enable syntax checking in all buffers whenever -possible. - -.. minor-mode:: flycheck-mode - - Enable :ref:`automatic syntax checking ` in the - current buffer. - -.. minor-mode:: global-flycheck-mode - - Enable :mode:`flycheck` in all buffers where syntax checking is possible. - - .. note:: - - This mode does not enable :mode:`flycheck` in remote files (via - TRAMP) and encrypted files. Checking remote files may be very slow - depending on the network connections, and checking encrypted files would - leak confidential data to temporary files and subprocesses. - - You can manually enable :mode:`flycheck` in these buffers nonetheless, but - we do *not* recommend this for said reasons. - - Add the following to your :term:`init file` to enable syntax checking - permanently: - - .. code-block:: elisp - - (add-hook 'after-init-hook #'global-flycheck-mode) - - You can exclude specific major modes from syntax checking with - `flycheck-global-modes`: - - .. defcustom:: flycheck-global-modes - - Major modes for which :mode:`global-flycheck` turns on :mode:`flycheck`: - - ``t`` (the default) - Turn :mode:`flycheck` on for all major modes. - - :samp:`({foo-mode} …)` - Turn :mode:`flycheck` on for all major modes in this list, - i.e. whenever the value of ``major-mode`` is contained in this list. - - :samp:`(not {foo-mode} …)` - Turn :mode:`flycheck` on for all major nodes *not* in this list, - i.e. whenever the value of ``major-mode`` is *not* contained in this - list. - - .. note:: - - :mode:`global-flycheck` never turns on :mode:`flycheck` in major modes - whose ``mode-class`` property is ``special``, regardless of the value - of this option. Syntax checking simply makes no sense in special - buffers which are typically intended for non-interactive display rather - than editing. - - .. seealso:: - - :infonode:`(elisp)Major Mode Conventions` - Information about major modes, and modes marked as special. - -.. _flycheck-automatic-checks: - -Check automatically -=================== - -By default :mode:`flycheck` automatically checks a buffer whenever - -* it is enabled, -* the buffer is saved, -* a new line is inserted, -* or a short time after the last change was made in a buffer. - -You can customise this behaviour with `flycheck-check-syntax-automatically`: - -.. defcustom:: flycheck-check-syntax-automatically - - A list of events which trigger a syntax check in the current buffer: - - ``save`` - Check the buffer immediately after it was saved. - - ``new-line`` - Check the buffer immediately after a new line was inserted. - - ``idle-change`` - Check the buffer a short time after the last change. The delay is - customisable with `flycheck-idle-change-delay`: - - .. defcustom:: flycheck-idle-change-delay - - Seconds to wait after the last change to the buffer before starting a - syntax check. - - ``idle-buffer-switch`` - Check the buffer a short time after switching to it from another - buffer. The delay is customisable with - `flycheck-idle-buffer-switch-delay`: - - .. defcustom:: flycheck-idle-buffer-switch-delay - - Seconds to wait after switching to a buffer before starting a - syntax check. - - If you switch to several buffers in rapid succession, the - behavior depends on - `flycheck-buffer-switch-check-intermediate-buffers`: - - .. defcustom:: flycheck-buffer-switch-check-intermediate-buffers - - If non-nil, then a buffer you switch to will have a syntax - check run even if you switch to another buffer before it - starts. If nil, then only the current buffer can have a - syntax check run. Note that syntax checks can still be run - in other buffers due to changes to their contents. - - ``mode-enabled`` - Check the buffer immediately after :mode:`flycheck` was enabled. - - For instance with the following setting :mode:`flycheck` will only check the - buffer when it was saved: - - .. code-block:: elisp - - (setq flycheck-check-syntax-automatically '(mode-enabled save)) - -.. _flycheck-manual-checks: - -Check manually -============== - -You can also start a syntax check explicitly with `C-c ! c`: - -.. define-key:: C-c ! c - M-x flycheck-buffer - - Check syntax in the current buffer. diff --git a/emacs.d/vendor/flycheck/doc/user/troubleshooting.rst b/emacs.d/vendor/flycheck/doc/user/troubleshooting.rst deleted file mode 100644 index 87f9503..0000000 --- a/emacs.d/vendor/flycheck/doc/user/troubleshooting.rst +++ /dev/null @@ -1,129 +0,0 @@ -.. _flycheck-troubleshooting: - -================= - Troubleshooting -================= - -If syntax checking does not work as expected there are a number of steps that -you can follow to isolate and maybe fix the problem. - -.. _flycheck-common-issues: - -Common issues -============= - -First check whether your issue is one of the common setup issues and problems. - -.. _flycheck-macos-exec-path-from-shell: - -Flycheck can’t find any programs in GUI Emacs on MacOS ------------------------------------------------------- - -Try to install and configure exec-path-from-shell_ to make a GUI Emacs inherit -the ``$PATH`` environment variable from your shell configuration. - -The issue is that due to the special way MacOS starts GUI programs a GUI Emacs -does not inherit the environment variables from the shell configuration so Emacs -will lack some important entries in ``$PATH``, most notably ``/usr/local/bin/`` -where Homebrew, NPM and many other package managers put binaries in. - -The `exec-path-from-shell`_ works around this issue by extracting environment -variables from a shell session and inject them into the environment of the -running Emacs instance. - -.. _exec-path-from-shell: https://github.com/purcell/exec-path-from-shell - -Flycheck warns about “non-zero exit code, but no errors” --------------------------------------------------------- - -Make sure that you have the latest version of the syntax checker installed, -particularly if the message started appearing after you updated Flycheck. - -Newer releases of Flycheck may require newer versions of syntax checking tools. -For instance Flycheck might now pass a command line flag that older versions do -not understand, or attempt to parse an updated output format. In these cases -the syntax checker will show an error message about an unknown flag, or emit -output that Flycheck does not understand, which prompts Flycheck to warn that -even though the syntax checker appeared to not have successfully checked the -buffer content there are no errors to be found. - -If you *are* using the latest version then this message most likely indicates a -flaw in the syntax checker definition. In this case please :ref:`report a bug -` to us so that we can fix the issue. Please don’t forget -to say that you are using the latest version! - -Verify your setup -================= - -If your issue is none of the aforementioned :ref:`common issues -` the first step is to let Flycheck check your setup: - -.. define-key:: C-c ! v - M-x flycheck-verify-setup - - Show a :term:`verification buffer` with information about your - :mode:`flycheck` setup for the current buffer. - - The buffer contains all syntax checkers available for the current buffer and - tells you whether Flycheck would use each one and what reasons would prevent - Flycheck from using a checker. It also includes information about your - Flycheck and Emacs version and your operating system. - -The following image shows a :term:`verification buffer`: - -.. image:: /images/flycheck-verify-buffer.png - -The buffer shows all syntax checkers for the current buffer. Note that you can -click on the syntax checker names to show the docstring for a syntax checker. - -* *Green* items indicate *good* configuration. In the screenshot both - `python-flake8` and `python-pycompile` exist. - -* *Orange* items indicate a *potential* misconfiguration. The screenshot shows - that no configuration file was found for `python-flake8` which is perfectly - fine if there’s no flake8 configuration file in the project, but not so good - if you’d like Flycheck to use a configuration file for flake8. The section - :ref:`flycheck-checker-config-files` has more information about configuration - files. - - Likewise the buffer warns you that a ``demo`` syntax checker (which is not - part of Flycheck of course) isn’t registered in `flycheck-checkers`. If you’d - like Flycheck to automatically use this syntax checker you should fix this - issue by adding it to `flycheck-checkers` but otherwise it’s safe to ignore - this warning. - -* *Red* items indicate *bad* configuration. `python-pylint` wasn’t found in the - screenshot, so you’ll not be able to use pylint in the current buffer. - -Debug syntax checkers -===================== - -If a syntax checker fails although it successfully verified you need to take a -closer look. Flycheck provides you with a command that lets you run a single -syntax checker just the way Flycheck would run it: - -.. define-key:: C-c ! C-c - M-x flycheck-compile - - Prompt for a syntax checker and run in as a shell command, showing the whole - output in a separate buffer. - - .. important:: - - The current implementation this command suffers from a couple of issues, - so we’d like to have a replacement in GH-854_ and we could use your help! - If you’d like to help out with this task please join the discussion in - that issue. - - .. _GH-854: https://github.com/flycheck/flycheck/issues/854 - -The output of this command can provide you helpful clues about what’s going on. -It also helps to compare the output of the command in Emacs with what happens if -you run the same command in a terminal. - -If all else fails… -================== - -…please do :ref:`ask for help `. We have many different -channels, from Twitter to a chat room to StackOverflow, whatever suits you best, -and we try to help you as fast and as well as possible. diff --git a/emacs.d/vendor/flycheck/flycheck-buttercup.el b/emacs.d/vendor/flycheck/flycheck-buttercup.el deleted file mode 100644 index 9802265..0000000 --- a/emacs.d/vendor/flycheck/flycheck-buttercup.el +++ /dev/null @@ -1,157 +0,0 @@ -;;; flycheck-buttercup.el --- Flycheck: Extensions to Buttercup -*- lexical-binding: t; -*- - -;; Copyright (C) 2017 Flycheck contributors -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner -;; Maintainer: Clément Pit-Claudel -;; fmdkdd -;; Keywords: lisp, tools - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Extensions to Buttercup to write BDD tests for Flycheck. -;; -;; Buttercup is a BDD testing framework for Emacs, see URL -;; `https://github.com/jorgenschaefer/emacs-buttercup/'. Flycheck uses -;; Buttercup extensively for new tests. -;; -;; This library provides extensions to Buttercup to write Specs for Flycheck. -;; -;; * Custom matchers -;; -;; (expect 'foo :to-be-local) - Is `foo' a local variable in the current buffer? - -;;; Code: - -(require 'buttercup) -(require 'flycheck) -(require 'seq) - - -;;; Buttercup helpers - -(defun flycheck-buttercup-format-error-list (errors) - "Format ERRORS into a human-readable string." - (mapconcat (lambda (e) (flycheck-error-format e 'with-file-name)) - errors "\n")) - - -;;; Data matchers - -(buttercup-define-matcher :to-be-empty-string (s) - (let ((s (funcall s))) - (if (equal s "") - (cons t (format "Expected %S not be an empty string" s)) - (cons nil (format "Expected %S to be an empty string" s))))) - -(buttercup-define-matcher :to-match-with-group (re s index match) - (let* ((re (funcall re)) - (s (funcall s)) - (index (funcall index)) - (match (funcall match)) - (matches? (string-match re s)) - (result (and matches? (match-string index s)))) - (if (and matches? (equal result match)) - (cons t (format "Expected %S not to match %S with %S in group %s" - re s match index)) - - (cons nil (format "Expected %S to match %S with %S in group %s, %s" - re s match index - (if matches? - (format "but got %S" result) - "but did not match")))))) - - -;;; Emacs feature matchers - -(buttercup-define-matcher :to-be-live (buffer) - (let ((buffer (get-buffer (funcall buffer)))) - (if (buffer-live-p buffer) - (cons t (format "Expected %S not to be a live buffer, but it is" - buffer)) - (cons nil (format "Expected %S to be a live buffer, but it is not" - buffer))))) - -(buttercup-define-matcher :to-be-visible (buffer) - (let ((buffer (get-buffer (funcall buffer)))) - (cond - ((and buffer (get-buffer-window buffer)) - (cons t (format "Expected %S not to be a visible buffer, but it is" - buffer))) - ((not (bufferp buffer)) - (cons nil - (format "Expected %S to be a visible buffer, but it is not a buffer" - buffer))) - (t (cons - nil - (format "Expected %S to be a visible buffer, but it is not visible" - buffer)))))) - -(buttercup-define-matcher :to-be-local (symbol) - (let ((symbol (funcall symbol))) - (if (local-variable-p symbol) - (cons t (format "Expected %S not to be a local variable, but it is" - symbol)) - (cons nil (format "Expected %S to be a local variable, but it is not" - symbol))))) - -(buttercup-define-matcher :to-contain-match (buffer re) - (let ((buffer (funcall buffer)) - (re (funcall re))) - (if (not (get-buffer buffer)) - (cons nil (format "Expected %S to contain a match of %s, \ -but is not a buffer" buffer re)) - (with-current-buffer buffer - (save-excursion - (goto-char (point-min)) - (if (re-search-forward re nil 'noerror) - (cons t (format "Expected %S to contain a match \ -for %s, but it did not" buffer re)) - (cons nil (format "Expected %S not to contain a match for \ -%s but it did not." buffer re)))))))) - - -;;; Flycheck matchers - -(buttercup-define-matcher :to-be-equal-flycheck-errors (a b) - (let* ((a (funcall a)) - (b (funcall b)) - (a-formatted (flycheck-buttercup-format-error-list a)) - (b-formatted (flycheck-buttercup-format-error-list b))) - (if (equal a b) - (cons t (format "Expected -%s -not to be equal to -%s" a-formatted b-formatted)) - (cons nil (format "Expected -%s -to be equal to -%s" a-formatted b-formatted))))) - -(provide 'flycheck-buttercup) - -;; Disable byte compilation for this library, to prevent package.el choking on a -;; missing `buttercup' library. See -;; https://github.com/flycheck/flycheck/issues/860 - -;; Local Variables: -;; no-byte-compile: t -;; End: - -;;; flycheck-buttercup.el ends here diff --git a/emacs.d/vendor/flycheck/flycheck-ert.el b/emacs.d/vendor/flycheck/flycheck-ert.el deleted file mode 100644 index 4d64a73..0000000 --- a/emacs.d/vendor/flycheck/flycheck-ert.el +++ /dev/null @@ -1,507 +0,0 @@ -;;; flycheck-ert.el --- Flycheck: ERT extensions -*- lexical-binding: t; -*- - -;; Copyright (C) 2017-2018 Flycheck contributors -;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner -;; Maintainer: Clément Pit-Claudel -;; fmdkdd -;; URL: https://github.com/flycheck/flycheck - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Unit testing library for Flycheck, the modern on-the-fly syntax checking -;; extension for GNU Emacs. - -;; Provide various utility functions and unit test helpers to test Flycheck and -;; Flycheck extensions. - -;;; Code: - -(require 'flycheck) -(require 'ert) -(require 'macroexp) ; For macro utilities - - -;;; Compatibility - -(eval-and-compile - ;; Provide `ert-skip' and friends for Emacs 24.3 - (defconst flycheck-ert-ert-can-skip (fboundp 'ert-skip) - "Whether ERT supports test skipping.") - - (unless (fboundp 'define-error) - ;; from Emacs `subr.el' - (defun define-error (name message &optional parent) - "Define NAME as a new error signal. -MESSAGE is a string that will be output to the echo area if such an error -is signaled without being caught by a `condition-case'. -PARENT is either a signal or a list of signals from which it inherits. -Defaults to `error'." - (unless parent (setq parent 'error)) - (let ((conditions - (if (consp parent) - (apply #'append - (mapcar - (lambda (parent) - (cons parent - (or (get parent 'error-conditions) - (error "Unknown signal `%s'" parent)))) - parent)) - (cons parent (get parent 'error-conditions))))) - (put name 'error-conditions - (delete-dups (copy-sequence (cons name conditions)))) - (when message (put name 'error-message message))))) - - (unless flycheck-ert-ert-can-skip - ;; Fake skipping - - (define-error 'flycheck-ert-skipped "Test skipped") - - (defun ert-skip (data) - (signal 'flycheck-ert-skipped data)) - - (defmacro skip-unless (form) - `(unless (ignore-errors ,form) - (signal 'flycheck-ert-skipped ',form))) - - (defun ert-test-skipped-p (result) - (and (ert-test-failed-p result) - (eq (car (ert-test-failed-condition result)) - 'flycheck-ert-skipped))))) - - -;;; Internal variables - -(defvar flycheck-ert--resource-directory nil - "The directory to get resources from in this test suite.") - - -;;; Resource management macros - -(defmacro flycheck-ert-with-temp-buffer (&rest body) - "Eval BODY within a temporary buffer. - -Like `with-temp-buffer', but resets the modification state of the -temporary buffer to make sure that it is properly killed even if -it has a backing file and is modified." - (declare (indent 0) (debug t)) - `(with-temp-buffer - (unwind-protect - ,(macroexp-progn body) - ;; Reset modification state of the buffer, and unlink it from its backing - ;; file, if any, because Emacs refuses to kill modified buffers with - ;; backing files, even if they are temporary. - (set-buffer-modified-p nil) - (set-visited-file-name nil 'no-query)))) - -(defmacro flycheck-ert-with-file-buffer (file-name &rest body) - "Create a buffer from FILE-NAME and eval BODY. - -BODY is evaluated with `current-buffer' being a buffer with the -contents FILE-NAME." - (declare (indent 1) (debug t)) - `(let ((file-name ,file-name)) - (unless (file-exists-p file-name) - (error "%s does not exist" file-name)) - (flycheck-ert-with-temp-buffer - (insert-file-contents file-name 'visit) - (set-visited-file-name file-name 'no-query) - (cd (file-name-directory file-name)) - ;; Mark the buffer as not modified, because we just loaded the file up to - ;; now. - (set-buffer-modified-p nil) - ,@body))) - -(defmacro flycheck-ert-with-help-buffer (&rest body) - "Execute BODY and kill the help buffer afterwards. - -Use this macro to test functions that create a Help buffer." - (declare (indent 0)) - `(unwind-protect - ,(macroexp-progn body) - (when (buffer-live-p (get-buffer (help-buffer))) - (kill-buffer (help-buffer))))) - -(defmacro flycheck-ert-with-global-mode (&rest body) - "Execute BODY with Global Flycheck Mode enabled. - -After BODY, restore the old state of Global Flycheck Mode." - (declare (indent 0)) - `(let ((old-state global-flycheck-mode)) - (unwind-protect - (progn - (global-flycheck-mode 1) - ,@body) - (global-flycheck-mode (if old-state 1 -1))))) - -(defmacro flycheck-ert-with-env (env &rest body) - "Add ENV to `process-environment' in BODY. - -Execute BODY with a `process-environment' which contains all -variables from ENV added. - -ENV is an alist, where each cons cell `(VAR . VALUE)' is a -environment variable VAR to be added to `process-environment' -with VALUE." - (declare (indent 1)) - `(let ((process-environment (copy-sequence process-environment))) - (pcase-dolist (`(,var . ,value) ,env) - (setenv var value)) - ,@body)) - - -;;; Test resources -(defun flycheck-ert-resource-filename (resource-file) - "Determine the absolute file name of a RESOURCE-FILE. - -Relative file names are expanded against -`flycheck-ert--resource-directory'." - (expand-file-name resource-file flycheck-ert--resource-directory)) - -(defmacro flycheck-ert-with-resource-buffer (resource-file &rest body) - "Create a temp buffer from a RESOURCE-FILE and execute BODY. - -The absolute file name of RESOURCE-FILE is determined with -`flycheck-ert-resource-filename'." - (declare (indent 1)) - `(flycheck-ert-with-file-buffer - (flycheck-ert-resource-filename ,resource-file) - ,@body)) - - -;;; Test suite initialization - -(defun flycheck-ert-initialize (resource-dir) - "Initialize a test suite with RESOURCE-DIR. - -RESOURCE-DIR is the directory, `flycheck-ert-resource-filename' -should use to lookup resource files." - (when flycheck-ert--resource-directory - (error "Test suite already initialized")) - (let ((tests (ert-select-tests t t))) - ;; Select all tests - (unless tests - (error "No tests defined. \ -Call `flycheck-ert-initialize' after defining all tests!")) - - (setq flycheck-ert--resource-directory resource-dir) - - ;; Emacs 24.3 don't support skipped tests, so we add poor man's test - ;; skipping: We mark skipped tests as expected failures by adjusting the - ;; expected result of all test cases. Not particularly pretty, but works :) - (unless flycheck-ert-ert-can-skip - (dolist (test tests) - (let ((result (ert-test-expected-result-type test))) - (setf (ert-test-expected-result-type test) - `(or ,result (satisfies ert-test-skipped-p)))))))) - - -;;; Test case definitions -(defmacro flycheck-ert-def-checker-test (checker language name - &rest keys-and-body) - "Define a test case for a syntax CHECKER for LANGUAGE. - -CHECKER is a symbol or a list of symbols denoting syntax checkers -being tested by the test. The test case is skipped, if any of -these checkers cannot be used. LANGUAGE is a symbol or a list of -symbols denoting the programming languages supported by the -syntax checkers. This is currently only used for tagging the -test appropriately. - -NAME is a symbol denoting the local name of the test. The test -itself is ultimately named -`flycheck-define-checker/CHECKER/NAME'. If CHECKER is a list, -the first checker in the list is used for naming the test. - -Optionally, the keyword arguments `:tags' and `:expected-result' -may be given. They have the same meaning as in `ert-deftest.', -and are added to the tags and result expectations set up by this -macro. - -The remaining forms KEYS-AND-BODY denote the body of the test -case, including assertions and setup code." - (declare (indent 3)) - (unless checker - (error "No syntax checkers specified")) - (unless language - (error "No languages specified")) - (let* ((checkers (if (symbolp checker) (list checker) checker)) - (checker (car checkers)) - (languages (if (symbolp language) (list language) language)) - (language-tags (mapcar (lambda (l) (intern (format "language-%s" l))) - languages)) - (checker-tags (mapcar (lambda (c) (intern (format "checker-%s" c))) - checkers)) - (local-name (or name 'default)) - (full-name (intern (format "flycheck-define-checker/%s/%s" - checker local-name))) - (keys-and-body (ert--parse-keys-and-body keys-and-body)) - (body (cadr keys-and-body)) - (keys (car keys-and-body)) - (default-tags '(syntax-checker external-tool))) - `(ert-deftest ,full-name () - :expected-result ,(or (plist-get keys :expected-result) :passed) - :tags (append ',(append default-tags language-tags checker-tags) - ,(plist-get keys :tags)) - ,@(mapcar (lambda (c) - `(skip-unless - ;; Ignore non-command checkers - (or (not (flycheck-checker-get ',c 'command)) - (executable-find (flycheck-checker-executable ',c))))) - checkers) - ,@body))) - - -;;; Test case results - -(defun flycheck-ert-syntax-check-timed-out-p (result) - "Whether RESULT denotes a timed-out test. - -RESULT is an ERT test result object." - (and (ert-test-failed-p result) - (eq (car (ert-test-failed-condition result)) - 'flycheck-ert-syntax-check-timed-out))) - - -;;; Syntax checking in tests - -(defvar-local flycheck-ert-syntax-checker-finished nil - "Non-nil if the current checker has finished.") - -(add-hook 'flycheck-after-syntax-check-hook - (lambda () (setq flycheck-ert-syntax-checker-finished t))) - -(defconst flycheck-ert-checker-wait-time 10 - "Time to wait until a checker is finished in seconds. - -After this time has elapsed, the checker is considered to have -failed, and the test aborted with failure.") - -(define-error 'flycheck-ert-syntax-check-timed-out "Syntax check timed out.") - -(defun flycheck-ert-wait-for-syntax-checker () - "Wait until the syntax check in the current buffer is finished." - (let ((starttime (float-time))) - (while (and (not flycheck-ert-syntax-checker-finished) - (< (- (float-time) starttime) flycheck-ert-checker-wait-time)) - (accept-process-output nil 0.02)) - (unless (< (- (float-time) starttime) flycheck-ert-checker-wait-time) - (flycheck-stop) - (signal 'flycheck-ert-syntax-check-timed-out nil))) - (setq flycheck-ert-syntax-checker-finished nil)) - -(defun flycheck-ert-buffer-sync () - "Like `flycheck-buffer', but synchronously." - (setq flycheck-ert-syntax-checker-finished nil) - (should (not (flycheck-running-p))) - (flycheck-mode) ;; This will only start a deferred check, - (should (flycheck-get-checker-for-buffer)) - (flycheck-buffer) ;; …so we need an explicit manual check - ;; After starting the check, the checker should either be running now, or - ;; already be finished (if it was fast). - (should (or flycheck-current-syntax-check - flycheck-ert-syntax-checker-finished)) - ;; Also there should be no deferred check pending anymore - (should-not (flycheck-deferred-check-p)) - (flycheck-ert-wait-for-syntax-checker)) - -(defun flycheck-ert-ensure-clear () - "Clear the current buffer. - -Raise an assertion error if the buffer is not clear afterwards." - (flycheck-clear) - (should (not flycheck-current-errors)) - (should (not (-any? (lambda (ov) (overlay-get ov 'flycheck-overlay)) - (overlays-in (point-min) (point-max)))))) - - -;;; Test assertions - -(defun flycheck-error-without-group (err) - "Return a copy ERR with the `group' property set to nil." - (let ((copy (copy-flycheck-error err))) - (setf (flycheck-error-group copy) nil) - copy)) - -(defun flycheck-ert-should-overlay (error) - "Test that ERROR has a proper overlay in the current buffer. - -ERROR is a Flycheck error object." - (let* ((overlay (-first (lambda (ov) - (equal (flycheck-error-without-group - (overlay-get ov 'flycheck-error)) - (flycheck-error-without-group error))) - (flycheck-overlays-in 0 (+ 1 (buffer-size))))) - (region - ;; Overlays of errors from other files are on the first line - (if (flycheck-relevant-error-other-file-p error) - (cons (point-min) - (save-excursion (goto-char (point-min)) (point-at-eol))) - (flycheck-error-region-for-mode error 'symbols))) - (level (flycheck-error-level error)) - (category (flycheck-error-level-overlay-category level)) - (face (get category 'face)) - (fringe-bitmap (flycheck-error-level-fringe-bitmap level)) - (fringe-face (flycheck-error-level-fringe-face level)) - (fringe-icon (list 'left-fringe fringe-bitmap fringe-face))) - (should overlay) - (should (overlay-get overlay 'flycheck-overlay)) - (should (= (overlay-start overlay) (car region))) - (should (= (overlay-end overlay) (cdr region))) - (should (eq (overlay-get overlay 'face) face)) - (should (equal (get-char-property 0 'display - (overlay-get overlay 'before-string)) - fringe-icon)) - (should (eq (overlay-get overlay 'category) category)) - (should (equal (flycheck-error-without-group (overlay-get overlay - 'flycheck-error)) - (flycheck-error-without-group error))))) - -(defun flycheck-ert-sort-errors (errors) - "Sort ERRORS by `flycheck-error-<'." - (seq-sort #'flycheck-error-< errors)) - -(defun flycheck-ert-should-errors (&rest errors) - "Test that the current buffers has ERRORS. - -ERRORS is a list of errors expected to be present in the current -buffer. Each error is given as a list of arguments to -`flycheck-error-new-at'. - -If ERRORS are omitted, test that there are no errors at all in -the current buffer. - -With ERRORS, test that each error in ERRORS is present in the -current buffer, and that the number of errors in the current -buffer is equal to the number of given ERRORS. In other words, -check that the buffer has all ERRORS, and no other errors." - (let ((expected (flycheck-ert-sort-errors - (mapcar (apply-partially #'apply #'flycheck-error-new-at) - errors))) - (current (flycheck-ert-sort-errors flycheck-current-errors))) - (should (equal (mapcar #'flycheck-error-without-group expected) - (mapcar #'flycheck-error-without-group current))) - ;; Check that related errors are the same - (cl-mapcar - (lambda (err1 err2) - (should (equal (flycheck-ert-sort-errors - (mapcar #'flycheck-error-without-group - (flycheck-related-errors err1 expected))) - (flycheck-ert-sort-errors - (mapcar #'flycheck-error-without-group - (flycheck-related-errors err2)))))) - expected current) - (mapc #'flycheck-ert-should-overlay expected)) - (should (= (length errors) - (length (flycheck-overlays-in (point-min) (point-max)))))) - -(define-error 'flycheck-ert-suspicious-checker "Suspicious state from checker") - -(defun flycheck-ert-should-syntax-check-in-buffer (&rest errors) - "Test a syntax check in BUFFER, expecting ERRORS. - -This is like `flycheck-ert-should-syntax-check', but with a -buffer in the right mode instead of a file." - ;; Load safe file-local variables because some tests depend on them - (let ((enable-local-variables :safe) - ;; Disable all hooks at this place, to prevent 3rd party packages - ;; from interfering - (hack-local-variables-hook)) - (hack-local-variables)) - ;; Configure config file locating for unit tests - (let ((process-hook-called 0) - (suspicious nil)) - (add-hook 'flycheck-process-error-functions - (lambda (_err) - (setq process-hook-called (1+ process-hook-called)) - nil) - nil :local) - (add-hook 'flycheck-status-changed-functions - (lambda (status) - (when (eq status 'suspicious) - (setq suspicious t))) - nil :local) - (flycheck-ert-buffer-sync) - (when suspicious - (signal 'flycheck-ert-suspicious-checker nil)) - (apply #'flycheck-ert-should-errors errors) - (should (= process-hook-called (length errors)))) - (flycheck-ert-ensure-clear)) - -(defun flycheck-ert-should-syntax-check (resource-file modes &rest errors) - "Test a syntax check in RESOURCE-FILE with MODES. - -RESOURCE-FILE is the file to check. MODES is a single major mode -symbol or a list thereof, specifying the major modes to syntax -check with. If more than one major mode is specified, the test -is run for each mode separately, so if you give three major -modes, the entire test will run three times. ERRORS is the list -of expected errors, as in `flycheck-ert-should-errors'. If -omitted, the syntax check must not emit any errors. The errors -are cleared after each test. - -The syntax checker is selected via standard syntax checker -selection. To test a specific checker, you need to set -`flycheck-checker' or `flycheck-disabled-checkers' accordingly -before using this predicate, depending on whether you want to use -manual or automatic checker selection. - -During the syntax check, configuration files of syntax checkers -are also searched in the `config-files' sub-directory of the -resource directory." - (when (symbolp modes) - (setq modes (list modes))) - (dolist (mode modes) - (unless (fboundp mode) - (ert-skip (format "%S missing" mode))) - (flycheck-ert-with-resource-buffer resource-file - (funcall mode) - (apply #'flycheck-ert-should-syntax-check-in-buffer errors)))) - -(defun flycheck-ert-at-nth-error (n) - "Determine whether point is at the N'th Flycheck error. - -Return non-nil if the point is at the N'th Flycheck error in the -current buffer. Otherwise return nil." - (let* ((error (nth (1- n) flycheck-current-errors)) - (mode flycheck-highlighting-mode) - (region (flycheck-error-region-for-mode error mode))) - (and (member error (flycheck-overlay-errors-at (point))) - (= (point) (car region))))) - -(defun flycheck-ert-explain--at-nth-error (n) - "Explain a failed at-nth-error predicate at N." - (let ((errors (flycheck-overlay-errors-at (point)))) - (if (null errors) - (format "Expected to be at error %s, but no error at point %s" - n (point)) - (let ((pos (cl-position (car errors) flycheck-current-errors))) - (format "Expected to be at point %s and error %s, \ -but point %s is at error %s" - (car (flycheck-error-region-for-mode - (nth (1- n) flycheck-current-errors) - flycheck-highlighting-mode)) - n (point) (1+ pos)))))) - -(put 'flycheck-ert-at-nth-error 'ert-explainer - 'flycheck-ert-explain--at-nth-error) - -(provide 'flycheck-ert) - -;;; flycheck-ert.el ends here diff --git a/emacs.d/vendor/flycheck/flycheck.el b/emacs.d/vendor/flycheck/flycheck.el deleted file mode 100644 index 30a4a38..0000000 --- a/emacs.d/vendor/flycheck/flycheck.el +++ /dev/null @@ -1,12402 +0,0 @@ -;;; flycheck.el --- On-the-fly syntax checking -*- lexical-binding: t; -*- - -;; Copyright (C) 2017-2020 Flycheck contributors -;; Copyright (C) 2012-2016 Sebastian Wiesner and Flycheck contributors -;; Copyright (C) 2013, 2014 Free Software Foundation, Inc. -;; -;; Author: Sebastian Wiesner -;; Maintainer: Clément Pit-Claudel -;; fmdkdd -;; URL: http://www.flycheck.org -;; Keywords: convenience, languages, tools -;; Version: 32-cvs -;; Package-Requires: ((dash "2.12.1") (pkg-info "0.4") (let-alist "1.0.4") (seq "1.11") (emacs "24.3")) - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; On-the-fly syntax checking for GNU Emacs 24. -;; -;; Flycheck is a modern on-the-fly syntax checking extension for GNU Emacs, -;; intended as replacement for the older Flymake extension which is part of GNU -;; Emacs. -;; -;; Flycheck automatically checks buffers for errors while you type, and reports -;; warnings and errors directly in the buffer and in an optional IDE-like error -;; list. -;; -;; It comes with a rich interface for custom syntax checkers and other -;; extensions, and has already many 3rd party extensions adding new features. -;; -;; Please read the online manual at http://www.flycheck.org for more -;; information. You can open the manual directly from Emacs with `M-x -;; flycheck-manual'. -;; -;; # Setup -;; -;; Flycheck works best on Unix systems. It does not officially support Windows, -;; but tries to maintain Windows compatibility and should generally work fine on -;; Windows, too. -;; -;; To enable Flycheck add the following to your init file: -;; -;; (add-hook 'after-init-hook #'global-flycheck-mode) -;; -;; Flycheck will then automatically check buffers in supported languages, as -;; long as all necessary tools are present. Use `flycheck-verify-setup' to -;; troubleshoot your Flycheck setup. - -;;; Code: - -(eval-when-compile - (require 'let-alist) ; `let-alist' - (require 'compile) ; Compile Mode integration - (require 'jka-compr) ; To inhibit compression of temp files - (require 'pcase) ; `pcase-dolist' (`pcase' itself is autoloaded) - ) - -(require 'dash) - -(require 'seq) ; Sequence functions -(require 'subr-x nil 'no-error) ; Additional utilities, Emacs 24.4 and upwards -(require 'cl-lib) ; `cl-defstruct' and CL utilities -(require 'tabulated-list) ; To list errors -(require 'easymenu) ; Flycheck Mode menu definition -(require 'rx) ; Regexp fanciness in `flycheck-define-checker' -(require 'help-mode) ; `define-button-type' -(require 'find-func) ; `find-function-regexp-alist' -(require 'json) ; `flycheck-parse-tslint' -(require 'ansi-color) ; `flycheck-parse-with-patterns-without-color' - - -;; Declare a bunch of dynamic variables that we need from other modes -(defvar sh-shell) ; For shell script checker predicates -(defvar ess-language) ; For r-lintr predicate -(defvar markdown-hide-markup) ; -(defvar markdown-fontify-code-block-default-mode) ; For rust-error-explainer -(defvar markdown-fontify-code-blocks-natively) ; - -;; Tell the byte compiler about autoloaded functions from packages -(declare-function pkg-info-version-info "pkg-info" (package)) - - -;;; Compatibility -(eval-and-compile - (unless (fboundp 'string-suffix-p) - ;; TODO: Remove when dropping support for Emacs 24.3 and earlier - (defun string-suffix-p (suffix string &optional ignore-case) - "Return non-nil if SUFFIX is a suffix of STRING. -If IGNORE-CASE is non-nil, the comparison is done without paying -attention to case differences." - (let ((start-pos (- (length string) (length suffix)))) - (and (>= start-pos 0) - (eq t (compare-strings suffix nil nil - string start-pos nil ignore-case)))))) - - (defalias 'flycheck--format-message - (if (fboundp 'format-message) #'format-message #'format)) - - ;; TODO: Remove when dropping support for Emacs 24.3 and earlier - (unless (featurep 'subr-x) - ;; `subr-x' function for Emacs 24.3 and below - (defsubst string-join (strings &optional separator) - "Join all STRINGS using SEPARATOR." - (mapconcat 'identity strings separator)) - - (defsubst string-trim-left (string) - "Remove leading whitespace from STRING." - (if (string-match "\\`[ \t\n\r]+" string) - (replace-match "" t t string) - string)) - - (defsubst string-trim-right (string) - "Remove trailing whitespace from STRING." - (if (string-match "[ \t\n\r]+\\'" string) - (replace-match "" t t string) - string)) - - (defsubst string-trim (string) - "Remove leading and trailing whitespace from STRING." - (string-trim-left (string-trim-right string))) - - (defsubst string-empty-p (string) - "Check whether STRING is empty." - (string= string "")))) - - -;;; Customization -(defgroup flycheck nil - "Modern on-the-fly syntax checking for GNU Emacs." - :prefix "flycheck-" - :group 'tools - :link '(url-link :tag "Website" "http://www.flycheck.org") - :link '(url-link :tag "Github" "https://github.com/flycheck/flycheck")) - -(defgroup flycheck-config-files nil - "Configuration files for on-the-fly syntax checkers." - :prefix "flycheck-" - :group 'flycheck) - -(defgroup flycheck-options nil - "Options for on-the-fly syntax checkers." - :prefix "flycheck-" - :group 'flycheck) - -(defgroup flycheck-executables nil - "Executables of syntax checkers." - :prefix "flycheck-" - :group 'flycheck) - -(defgroup flycheck-faces nil - "Faces used by on-the-fly syntax checking." - :prefix "flycheck-" - :group 'flycheck) - -(defcustom flycheck-checkers - '(ada-gnat - asciidoctor - asciidoc - awk-gawk - bazel-buildifier - c/c++-clang - c/c++-gcc - c/c++-cppcheck - cfengine - chef-foodcritic - coffee - coffee-coffeelint - coq - css-csslint - css-stylelint - cuda-nvcc - cwl - d-dmd - dockerfile-hadolint - elixir-credo - emacs-lisp - emacs-lisp-checkdoc - ember-template - erlang-rebar3 - erlang - eruby-erubis - eruby-ruumba - fortran-gfortran - go-gofmt - go-golint - go-vet - go-build - go-test - go-errcheck - go-unconvert - go-staticcheck - groovy - haml - handlebars - haskell-stack-ghc - haskell-ghc - haskell-hlint - html-tidy - javascript-eslint - javascript-jshint - javascript-standard - json-jsonlint - json-python-json - json-jq - jsonnet - less - less-stylelint - llvm-llc - lua-luacheck - lua - markdown-markdownlint-cli - markdown-mdl - nix - nix-linter - opam - perl - perl-perlcritic - php - php-phpmd - php-phpcs - processing - proselint - protobuf-protoc - protobuf-prototool - pug - puppet-parser - puppet-lint - python-flake8 - python-pylint - python-pycompile - python-pyright - python-mypy - r-lintr - racket - rpm-rpmlint - rst-sphinx - rst - ruby-rubocop - ruby-standard - ruby-reek - ruby-rubylint - ruby - ruby-jruby - rust-cargo - rust - rust-clippy - scala - scala-scalastyle - scheme-chicken - scss-lint - scss-stylelint - sass/scss-sass-lint - sass - scss - sh-bash - sh-posix-dash - sh-posix-bash - sh-zsh - sh-shellcheck - slim - slim-lint - sql-sqlint - systemd-analyze - tcl-nagelfar - terraform - terraform-tflint - tex-chktex - tex-lacheck - texinfo - textlint - typescript-tslint - verilog-verilator - vhdl-ghdl - xml-xmlstarlet - xml-xmllint - yaml-jsyaml - yaml-ruby - yaml-yamllint) - "Syntax checkers available for automatic selection. - -A list of Flycheck syntax checkers to choose from when syntax -checking a buffer. Flycheck will automatically select a suitable -syntax checker from this list, unless `flycheck-checker' is set, -either directly or with `flycheck-select-checker'. - -You should not need to change this variable normally. In order -to disable syntax checkers, please use -`flycheck-disabled-checkers'. This variable is intended for 3rd -party extensions to tell Flycheck about new syntax checkers. - -Syntax checkers in this list must be defined with -`flycheck-define-checker'." - :group 'flycheck - :type '(repeat (symbol :tag "Checker")) - :risky t) - -(defcustom flycheck-disabled-checkers nil - "Syntax checkers excluded from automatic selection. - -A list of Flycheck syntax checkers to exclude from automatic -selection. Flycheck will never automatically select a syntax -checker in this list, regardless of the value of -`flycheck-checkers'. - -However, syntax checkers in this list are still available for -manual selection with `flycheck-select-checker'. - -Use this variable to disable syntax checkers, instead of removing -the syntax checkers from `flycheck-checkers'. You may also use -this option as a file or directory local variable to disable -specific checkers in individual files and directories -respectively." - :group 'flycheck - :type '(repeat (symbol :tag "Checker")) - :package-version '(flycheck . "0.16") - :safe #'flycheck-symbol-list-p) -(make-variable-buffer-local 'flycheck-disabled-checkers) - -(defvar-local flycheck--automatically-disabled-checkers nil - "List of syntax checkers automatically disabled for this buffer. - -A checker can be automatically disabled in two cases: - -1. Its `:enabled' predicate returned false. -2. It returned too many errors (see `flycheck-checker-error-threshold'). - -To trigger a reverification from Emacs Lisp code, do not modify -this variable: use `flycheck-reset-enabled-checker'.") - -(defvar-local flycheck-checker nil - "Syntax checker to use for the current buffer. - -If unset or nil, automatically select a suitable syntax checker -from `flycheck-checkers' on every syntax check. - -If set to a syntax checker only use this syntax checker and never -select one from `flycheck-checkers' automatically. The syntax -checker is used regardless of whether it is contained in -`flycheck-checkers' or `flycheck-disabled-checkers'. If the -syntax checker is unusable in the current buffer an error is -signaled. - -A syntax checker assigned to this variable must be defined with -`flycheck-define-checker'. - -Use the command `flycheck-select-checker' to select a syntax -checker for the current buffer, or set this variable as file -local variable to always use a specific syntax checker for a -file. See Info Node `(emacs)Specifying File Variables' for more -information about file variables.") -(put 'flycheck-checker 'safe-local-variable 'flycheck-registered-checker-p) - -(defcustom flycheck-locate-config-file-functions nil - "Functions to locate syntax checker configuration files. - -Each function in this hook must accept two arguments: The value -of the configuration file variable, and the syntax checker -symbol. It must return either a string with an absolute path to -the configuration file, or nil, if it cannot locate the -configuration file. - -The functions in this hook are called in order of appearance, until a -function returns non-nil. The configuration file returned by that -function is then given to the syntax checker if it exists. - -This variable is an abnormal hook. See Info -node `(elisp)Hooks'." - :group 'flycheck - :type 'hook - :risky t) - -(defcustom flycheck-checker-error-threshold 400 - "Maximum errors allowed per syntax checker. - -The value of this variable is either an integer denoting the -maximum number of errors per syntax checker and buffer, or nil to -not limit the errors reported from a syntax checker. - -If this variable is a number and a syntax checker reports more -errors than the value of this variable, its errors are not -discarded, and not highlighted in the buffer or available in the -error list. The affected syntax checker is also disabled for -future syntax checks of the buffer." - :group 'flycheck - :type '(choice (const :tag "Do not limit reported errors" nil) - (integer :tag "Maximum number of errors")) - :risky t - :package-version '(flycheck . "0.22")) - -(defcustom flycheck-process-error-functions nil - "Functions to process errors. - -Each function in this hook must accept a single argument: A -Flycheck error to process. - -All functions in this hook are called in order of appearance, -until a function returns non-nil. Thus, a function in this hook -may return nil, to allow for further processing of the error, or -any non-nil value, to indicate that the error was fully processed -and inhibit any further processing. - -The functions are called for each newly parsed error immediately -after the corresponding syntax checker finished. At this stage, -the overlays from the previous syntax checks are still present, -and there may be further syntax checkers in the chain. - -This variable is an abnormal hook. See Info -node `(elisp)Hooks'." - :group 'flycheck - :type 'hook - :package-version '(flycheck . "0.13") - :risky t) - -(defcustom flycheck-display-errors-delay 0.9 - "Delay in seconds before displaying errors at point. - -Use floating point numbers to express fractions of seconds." - :group 'flycheck - :type 'number - :package-version '(flycheck . "0.15") - :safe #'numberp) - -(defcustom flycheck-display-errors-function #'flycheck-display-error-messages - "Function to display error messages. - -If set to a function, call the function with the list of errors -to display as single argument. Each error is an instance of the -`flycheck-error' struct. - -If set to nil, do not display errors at all." - :group 'flycheck - :type '(choice (const :tag "Display error messages" - flycheck-display-error-messages) - (const :tag "Display error messages only if no error list" - flycheck-display-error-messages-unless-error-list) - (function :tag "Error display function")) - :package-version '(flycheck . "0.13") - :risky t) - -(defcustom flycheck-help-echo-function #'flycheck-help-echo-all-error-messages - "Function to compute the contents of the error tooltips. - -If set to a function, call the function with the list of errors -to display as single argument. Each error is an instance of the -`flycheck-error' struct. The function is used to set the -help-echo property of flycheck error overlays. It should return -a string, which is displayed when the user hovers over an error -or presses \\[display-local-help]. - -If set to nil, do not show error tooltips." - :group 'flycheck - :type '(choice (const :tag "Concatenate error messages to form a tooltip" - flycheck-help-echo-all-error-messages) - (function :tag "Help echo function")) - :package-version '(flycheck . "0.25") - :risky t) - -(defcustom flycheck-command-wrapper-function #'identity - "Function to modify checker commands before execution. - -The value of this option is a function which is given a list -containing the full command of a syntax checker after -substitution through `flycheck-substitute-argument' but before -execution. The function may return a new command for Flycheck to -execute. - -The default value is `identity' which does not change the -command. You may provide your own function to run Flycheck -commands through `bundle exec', `nix-shell' or similar wrappers." - :group 'flycheck - :type '(choice (const :tag "Do not modify commands" identity) - (function :tag "Modify command with a custom function")) - :package-version '(flycheck . "0.25") - :risky t) - -(defcustom flycheck-executable-find #'flycheck-default-executable-find - "Function to search for executables. - -The value of this option is a function which is given the name or -path of an executable and shall return the full path to the -executable, or nil if the executable does not exit. - -The default is `flycheck-default-executable-find', which searches -variable `exec-path' when given a command name, and resolves -paths to absolute ones. You can customize this option to search -for checkers in other environments such as bundle or NixOS -sandboxes." - :group 'flycheck - :type '(choice - (const :tag "Search executables in `exec-path'" - flycheck-default-executable-find) - (function :tag "Search executables with a custom function")) - :package-version '(flycheck . "32") - :risky t) - -(defun flycheck-default-executable-find (executable) - "Resolve EXECUTABLE to a full path. - -Like `executable-find', but supports relative paths. - -Attempts invoking `executable-find' first; if that returns nil, -and EXECUTABLE contains a directory component, expands to a full -path and tries invoking `executable-find' again." - ;; file-name-directory returns non-nil iff the given path has a - ;; directory component. - (or - (executable-find executable) - (when (file-name-directory executable) - (executable-find (expand-file-name executable))))) - -(defcustom flycheck-indication-mode 'left-fringe - "The indication mode for Flycheck errors. - -This variable controls how Flycheck indicates errors in buffers. -May be `left-fringe', `right-fringe', `left-margin', -`right-margin', or nil. - -If set to `left-fringe' or `right-fringe', indicate errors via -icons in the left and right fringe respectively. If set to -`left-margin' or `right-margin', use the margins instead. - -If set to nil, do not indicate errors and warnings, but just -highlight them according to `flycheck-highlighting-mode'." - :group 'flycheck - :type '(choice (const :tag "Indicate in the left fringe" left-fringe) - (const :tag "Indicate in the right fringe" right-fringe) - (const :tag "Indicate in the left margin" left-margin) - (const :tag "Indicate in the right margin" right-margin) - (const :tag "Do not indicate" nil)) - :safe #'symbolp) - -(defcustom flycheck-highlighting-mode 'symbols - "The highlighting mode for Flycheck errors and warnings. - -The highlighting mode controls how Flycheck highlights errors in -buffers when a checker only reports the starting position of an -error. The following modes are known: - -`columns' - Highlight a single character. If the error does not have a column, - highlight the whole line. - -`symbols' - Highlight a full symbol if there is any, otherwise behave like `columns'. - This is the default. - -`sexps' - Highlight a full expression, if there is any, otherwise behave like - `columns'. Note that this mode can be *very* slow in some major modes. - -`lines' - Highlight the whole line. - -nil - Do not highlight errors at all. However, errors will still - be reported in the mode line and in error message popups, - and indicated according to `flycheck-indication-mode'." - :group 'flycheck - :type '(choice (const :tag "Highlight columns only" columns) - (const :tag "Highlight symbols" symbols) - (const :tag "Highlight expressions" sexps) - (const :tag "Highlight whole lines" lines) - (const :tag "Do not highlight errors" nil)) - :package-version '(flycheck . "0.14") - :safe #'symbolp) - -(defvar flycheck-current-errors) -(defun flycheck-refresh-fringes-and-margins () - "Refresh fringes and margins of all windows displaying the current buffer. - -If any errors are currently shown, launch a new check, to adjust -to a potential new indication mode." - (dolist (win (get-buffer-window-list)) - (set-window-margins win left-margin-width right-margin-width) - (set-window-fringes win left-fringe-width right-fringe-width)) - (when flycheck-current-errors - (flycheck-buffer))) - -(defun flycheck-set-indication-mode (&optional mode) - "Set `flycheck-indication-mode' to MODE and adjust margins and fringes. - -When MODE is nil, adjust window parameters without changing the -mode. This function can be useful as a `flycheck-mode-hook', -especially if you use margins only in Flycheck buffers. - -When MODE is `left-margin', the left fringe is reduced to 1 pixel -to save space." - (interactive (list (intern (completing-read - "Mode: " '("left-fringe" "right-fringe" - "left-margin" "right-margin") - nil t nil nil - (prin1-to-string flycheck-indication-mode))))) - (setq mode (or mode flycheck-indication-mode)) - (pcase mode - ((or `left-fringe `right-fringe) - (setq left-fringe-width 8 right-fringe-width 8 - left-margin-width 0 right-margin-width 0)) - (`left-margin - (setq left-fringe-width 1 right-fringe-width 8 - left-margin-width 1 right-margin-width 0)) - (`right-margin - (setq left-fringe-width 8 right-fringe-width 8 - left-margin-width 0 right-margin-width 1)) - (_ (user-error "Invalid indication mode"))) - (setq-local flycheck-indication-mode mode) - (flycheck-refresh-fringes-and-margins)) - -(define-widget 'flycheck-highlighting-style 'lazy - "A value for `flycheck-highlighting-style'." - :offset 2 - :format "%t: Use %v" - :type '(choice - :format "%[Value Menu%] %v" - (const :tag "no highlighting" nil) - (const :tag "a face indicating the error level" level-face) - (list :tag "a pair of delimiters" - (const :format "" delimiters) - (string :tag "Before") - (string :tag "After")) - (list :tag "a conditional mix of styles" - (const :format "" conditional) - (integer :tag "Up to this many lines") - (flycheck-highlighting-style :format "Use %v") - (flycheck-highlighting-style :format "Otherwise, use %v")))) - -(defun flycheck--make-highlighting-delimiter (char) - "Make a highlighting bracket symbol by repeating CHAR twice." - (compose-chars ?\s - ;; '(Bl . Br) ?\s - '(Bc Br 30 0) char - '(Bc Bl -30 0) char)) - -(defcustom flycheck-highlighting-style - `(conditional 4 level-face (delimiters "" "")) - "The highlighting style for Flycheck errors and warnings. - -The highlighting style controls how Flycheck highlights error -regions in buffers. The following styles are supported: - -nil - Do not highlight errors. Same as setting - `flycheck-highlighting-mode' to nil. - -`level-face' - Chose a face depending on the severity of the error, and - apply it to the whole error text. See also the - `flycheck-define-error-level' and `flycheck-error', - `flycheck-warning', and `flycheck-info' faces. - -\(`delimiters' BEFORE AFTER) - Draw delimiters on each side of the error. BEFORE and AFTER - indicate which delimiters to use. If they are strings, they - are used as-is. If they are characters, they are repeated - twice and composed into a single character. Delimiters use - the fringe face corresponding to the severity of each error, - as well as the `flycheck-error-delimiter' face. Delimited - text has the `flycheck-delimited-error' face. - -\(`conditional' NLINES S1 S2) - Use style S1 for errors spanning up to NLINES lines, and - style S2 otherwise. - -See also `flycheck-highlighting-mode' and -`flycheck-indication-mode'." - :group 'flycheck - :type 'flycheck-highlighting-style - :package-version '(flycheck . "32") - :safe t) - -(defcustom flycheck-check-syntax-automatically '(save - idle-change - new-line - mode-enabled) - "When Flycheck should check syntax automatically. - -This variable is a list of events that may trigger syntax checks. -The following events are known: - -`save' - Check syntax immediately after the buffer was saved. - -`idle-change' - Check syntax a short time (see `flycheck-idle-change-delay') - after the last change to the buffer. - -`idle-buffer-switch' - Check syntax a short time (see `flycheck-idle-buffer-switch-delay') - after the user switches to a buffer. - -`new-line' - Check syntax immediately after a new line was inserted into - the buffer. - -`mode-enabled' - Check syntax immediately when variable `flycheck-mode' is - non-nil. - -Flycheck performs a syntax checks only on events, which are -contained in this list. For instance, if the value of this -variable is `(mode-enabled save)', Flycheck will only check if -the mode is enabled or the buffer was saved, but never after -changes to the buffer contents. - -If nil, never check syntax automatically. In this case, use -`flycheck-buffer' to start a syntax check manually." - :group 'flycheck - :type '(set (const :tag "After the buffer was saved" save) - (const :tag "After the buffer was changed and idle" idle-change) - (const - :tag "After switching the current buffer" idle-buffer-switch) - (const :tag "After a new line was inserted" new-line) - (const :tag "After `flycheck-mode' was enabled" mode-enabled)) - :package-version '(flycheck . "0.12") - :safe #'flycheck-symbol-list-p) - -(defcustom flycheck-idle-change-delay 0.5 - "How many seconds to wait after a change before checking syntax. - -After the buffer was changed, Flycheck will wait as many seconds -as the value of this variable before starting a syntax check. If -the buffer is modified during this time, Flycheck will wait -again. - -This variable has no effect, if `idle-change' is not contained in -`flycheck-check-syntax-automatically'." - :group 'flycheck - :type 'number - :package-version '(flycheck . "0.13") - :safe #'numberp) - -(defcustom flycheck-idle-buffer-switch-delay 0.5 - "How many seconds to wait after switching buffers before checking syntax. - -After the user switches to a new buffer, Flycheck will wait as -many seconds as the value of this variable before starting a -syntax check. If the user switches to another buffer during this -time, whether a syntax check is still performed depends on the -value of `flycheck-buffer-switch-check-intermediate-buffers'. - -This variable has no effect if `idle-buffer-switch' is not -contained in `flycheck-check-syntax-automatically'." - :group 'flycheck - :type 'number - :package-version '(flycheck . "32") - :safe #'numberp) - -(defcustom flycheck-buffer-switch-check-intermediate-buffers nil - "Whether to check syntax in a buffer you only visit briefly. - -If nil, then when you switch to a buffer but switch to another -buffer before the syntax check is performed, then the check is -canceled. If non-nil, then syntax checks due to switching -buffers are always performed. This only affects buffer switches -that happen less than `flycheck-idle-buffer-switch-delay' seconds -apart. - -This variable has no effect if `idle-buffer-switch' is not -contained in `flycheck-check-syntax-automatically'." - :group 'flycheck - :type 'boolean - :package-version '(flycheck . "32") - :safe #'booleanp) - -(defcustom flycheck-standard-error-navigation t - "Whether to support error navigation with `next-error'. - -If non-nil, enable navigation of Flycheck errors with -`next-error', `previous-error' and `first-error'. Otherwise, -these functions just navigate errors from compilation modes. - -Flycheck error navigation with `flycheck-next-error', -`flycheck-previous-error' and `flycheck-first-error' is always -enabled, regardless of the value of this variable. - -Note that this setting only takes effect when variable -`flycheck-mode' is non-nil. Changing it will not affect buffers -where variable `flycheck-mode' is already non-nil." - :group 'flycheck - :type 'boolean - :package-version '(flycheck . "0.15") - :safe #'booleanp) - -(define-widget 'flycheck-minimum-level 'lazy - "A radio-type choice of minimum error levels. - -See `flycheck-navigation-minimum-level' and -`flycheck-error-list-minimum-level'." - :type '(radio (const :tag "All locations" nil) - (const :tag "Informational messages" info) - (const :tag "Warnings" warning) - (const :tag "Errors" error) - (symbol :tag "Custom error level"))) - -(defcustom flycheck-navigation-minimum-level nil - "The minimum level of errors to navigate. - -If set to an error level, only navigate errors whose error level -is at least as severe as this one. If nil, navigate all errors." - :group 'flycheck - :type 'flycheck-minimum-level - :safe #'flycheck-error-level-p - :package-version '(flycheck . "0.21")) - -(defcustom flycheck-error-list-minimum-level nil - "The minimum level of errors to display in the error list. - -If set to an error level, only display errors whose error level -is at least as severe as this one in the error list. If nil, -display all errors. - -This is the default level, used when the error list is opened. -You can temporarily change the level using -\\[flycheck-error-list-set-filter], or reset it to this value -using \\[flycheck-error-list-reset-filter]." - :group 'flycheck - :type 'flycheck-minimum-level - :safe #'flycheck-error-level-p - :package-version '(flycheck . "0.24")) - -(defcustom flycheck-relevant-error-other-file-minimum-level 'error - "The minimum level of errors from other files to display in this buffer. - -If set to an error level, only display errors from other files -whose error level is at least as severe as this one. If nil, -display all errors from other files." - :group 'flycheck - :type 'flycheck-minimum-level - :safe #'flycheck-error-level-p - :package-version '(flycheck . "32")) - -(defcustom flycheck-relevant-error-other-file-show t - "Whether to show errors from other files." - :group 'flycheck - :type 'boolean - :package-version '(flycheck . "32") - :safe #'booleanp) - -(defcustom flycheck-completing-read-function #'completing-read - "Function to read from minibuffer with completion. - -The function must be compatible to the built-in `completing-read' -function." - :group 'flycheck - :type '(choice (const :tag "Default" completing-read) - (const :tag "IDO" ido-completing-read) - (function :tag "Custom function")) - :risky t - :package-version '(flycheck . "26")) - -(defcustom flycheck-temp-prefix "flycheck" - "Prefix for temporary files created by Flycheck." - :group 'flycheck - :type 'string - :package-version '(flycheck . "0.19") - :risky t) - -(defcustom flycheck-mode-hook nil - "Hooks to run after command `flycheck-mode' is toggled." - :group 'flycheck - :type 'hook - :risky t) - -(defcustom flycheck-after-syntax-check-hook nil - "Functions to run after each syntax check. - -This hook is run after a syntax check was finished. - -At this point, *all* chained checkers were run, and all errors -were parsed, highlighted and reported. The variable -`flycheck-current-errors' contains all errors from all syntax -checkers run during the syntax check, so you can apply any error -analysis functions. - -Note that this hook does *not* run after each individual syntax -checker in the syntax checker chain, but only after the *last -checker*. - -This variable is a normal hook. See Info node `(elisp)Hooks'." - :group 'flycheck - :type 'hook - :risky t) - -(defcustom flycheck-before-syntax-check-hook nil - "Functions to run before each syntax check. - -This hook is run right before a syntax check starts. - -Error information from the previous syntax check is *not* -cleared before this hook runs. - -Note that this hook does *not* run before each individual syntax -checker in the syntax checker chain, but only before the *first -checker*. - -This variable is a normal hook. See Info node `(elisp)Hooks'." - :group 'flycheck - :type 'hook - :risky t) - -(defcustom flycheck-syntax-check-failed-hook nil - "Functions to run if a syntax check failed. - -This hook is run whenever an error occurs during Flycheck's -internal processing. No information about the error is given to -this hook. - -You should use this hook to conduct additional cleanup actions -when Flycheck failed. - -This variable is a normal hook. See Info node `(elisp)Hooks'." - :group 'flycheck - :type 'hook - :risky t) - -(defcustom flycheck-status-changed-functions nil - "Functions to run if the Flycheck status changed. - -This hook is run whenever the status of Flycheck changes. Each -hook function takes the status symbol as single argument, as -given to `flycheck-report-status', which see. - -This variable is an abnormal hook. See Info -node `(elisp)Hooks'." - :group 'flycheck - :type 'hook - :risky t - :package-version '(flycheck . "0.20")) - -(defcustom flycheck-error-list-after-refresh-hook nil - "Functions to run after the error list was refreshed. - -This hook is run whenever the error list is refreshed. - -This variable is a normal hook. See Info node `(elisp)Hooks'." - :group 'flycheck - :type 'hook - :risky t - :package-version '(flycheck . "0.21")) - -(defface flycheck-error-delimiter - `((t)) - "Flycheck face for errors spanning multiple lines. - -See `flycheck-highlighting-style' for details on when this face -is used." - :package-version '(flycheck . "32") - :group 'flycheck-faces) - -(defface flycheck-delimited-error - `((t)) - "Flycheck face for errors spanning multiple lines. - -See `flycheck-highlighting-style' for details on when this face -is used." - :package-version '(flycheck . "32") - :group 'flycheck-faces) - -(defface flycheck-error - '((((supports :underline (:style wave))) - :underline (:style wave :color "Red1")) - (t - :underline t :inherit error)) - "Flycheck face for errors." - :package-version '(flycheck . "0.13") - :group 'flycheck-faces) - -(defface flycheck-warning - '((((supports :underline (:style wave))) - :underline (:style wave :color "DarkOrange")) - (t - :underline t :inherit warning)) - "Flycheck face for warnings." - :package-version '(flycheck . "0.13") - :group 'flycheck-faces) - -(defface flycheck-info - '((((supports :underline (:style wave))) - :underline (:style wave :color "ForestGreen")) - (t - :underline t :inherit success)) - "Flycheck face for informational messages." - :package-version '(flycheck . "0.15") - :group 'flycheck-faces) - -(defface flycheck-fringe-error - '((t :inherit error)) - "Flycheck face for fringe error indicators." - :package-version '(flycheck . "0.13") - :group 'flycheck-faces) - -(defface flycheck-fringe-warning - '((t :inherit warning)) - "Flycheck face for fringe warning indicators." - :package-version '(flycheck . "0.13") - :group 'flycheck-faces) - -(defface flycheck-fringe-info - ;; Semantically `success' is probably not the right face, but it looks nice as - ;; a base face - '((t :inherit success)) - "Flycheck face for fringe info indicators." - :package-version '(flycheck . "0.15") - :group 'flycheck-faces) - -(defface flycheck-error-list-error - '((t :inherit error)) - "Flycheck face for error messages in the error list." - :package-version '(flycheck . "0.16") - :group 'flycheck-faces) - -(defface flycheck-error-list-warning - '((t :inherit warning)) - "Flycheck face for warning messages in the error list." - :package-version '(flycheck . "0.16") - :group 'flycheck-faces) - -(defface flycheck-error-list-info - '((t :inherit success)) - "Flycheck face for info messages in the error list." - :package-version '(flycheck . "0.16") - :group 'flycheck-faces) - -(defface flycheck-error-list-line-number - '((t)) - "Face for line numbers in the error list." - :group 'flycheck-faces - :package-version '(flycheck . "0.16")) - -(defface flycheck-error-list-column-number - '((t)) - "Face for line numbers in the error list." - :group 'flycheck-faces - :package-version '(flycheck . "0.16")) - -(defface flycheck-error-list-filename - '((t :inherit mode-line-buffer-id :bold nil)) - "Face for filenames in the error list." - :group 'flycheck-faces - :package-version '(flycheck . "32")) - -(defface flycheck-error-list-id - '((t :inherit font-lock-type-face)) - "Face for the error ID in the error list." - :group 'flycheck-faces - :package-version '(flycheck . "0.22")) - -(defface flycheck-error-list-id-with-explainer - '((t :inherit flycheck-error-list-id - :box (:style released-button))) - "Face for the error ID in the error list, for errors that have an explainer." - :group 'flycheck-faces - :package-version '(flycheck . "30")) - -(defface flycheck-error-list-checker-name - '((t :inherit font-lock-function-name-face)) - "Face for the syntax checker name in the error list." - :group 'flycheck-faces - :package-version '(flycheck . "0.21")) - -(defface flycheck-error-list-error-message - '((t)) - "Face for the error message in the error list." - :group 'flycheck-faces - :package-version '(flycheck . "33")) - -(defface flycheck-error-list-highlight - '((t :bold t)) - "Flycheck face to highlight errors in the error list." - :package-version '(flycheck . "0.15") - :group 'flycheck-faces) - -(defface flycheck-verify-select-checker - '((t :box (:style released-button))) - "Flycheck face for the 'select' button in the verify setup buffer." - :package-version '(flycheck . "32") - :group 'flycheck-faces) - -(defvar flycheck-command-map - (let ((map (make-sparse-keymap))) - (define-key map "c" #'flycheck-buffer) - (define-key map "C" #'flycheck-clear) - (define-key map (kbd "C-c") #'flycheck-compile) - (define-key map "n" #'flycheck-next-error) - (define-key map "p" #'flycheck-previous-error) - (define-key map "l" #'flycheck-list-errors) - (define-key map (kbd "C-w") #'flycheck-copy-errors-as-kill) - (define-key map "s" #'flycheck-select-checker) - (define-key map "?" #'flycheck-describe-checker) - (define-key map "h" #'flycheck-display-error-at-point) - (define-key map "e" #'flycheck-explain-error-at-point) - (define-key map "H" #'display-local-help) - (define-key map "i" #'flycheck-manual) - (define-key map "V" #'flycheck-version) - (define-key map "v" #'flycheck-verify-setup) - (define-key map "x" #'flycheck-disable-checker) - map) - "Keymap of Flycheck interactive commands.") - -(defcustom flycheck-keymap-prefix (kbd "C-c !") - "Prefix for key bindings of Flycheck. - -Changing this variable outside Customize does not have any -effect. To change the keymap prefix from Lisp, you need to -explicitly re-define the prefix key: - - (define-key flycheck-mode-map flycheck-keymap-prefix nil) - (setq flycheck-keymap-prefix (kbd \"C-c f\")) - (define-key flycheck-mode-map flycheck-keymap-prefix - flycheck-command-map) - -Please note that Flycheck's manual documents the default -keybindings. Changing this variable is at your own risk." - :group 'flycheck - :package-version '(flycheck . "0.19") - :type 'string - :risky t - :set - (lambda (variable key) - (when (and (boundp variable) (boundp 'flycheck-mode-map)) - (define-key flycheck-mode-map (symbol-value variable) nil) - (define-key flycheck-mode-map key flycheck-command-map)) - (set-default variable key))) - -(defcustom flycheck-mode-line '(:eval (flycheck-mode-line-status-text)) - "Mode line lighter for Flycheck. - -The value of this variable is a mode line template as in -`mode-line-format'. See Info Node `(elisp)Mode Line Format' for -more information. Note that it should contain a _single_ mode -line construct only. - -Customize this variable to change how Flycheck reports its status -in the mode line. You may use `flycheck-mode-line-status-text' -to obtain a human-readable status text, including an -error/warning count. - -You may also assemble your own status text. The current status -of Flycheck is available in `flycheck-last-status-change'. The -errors in the current buffer are stored in -`flycheck-current-errors', and the function -`flycheck-count-errors' may be used to obtain the number of -errors grouped by error level. - -Set this variable to nil to disable the mode line completely." - :group 'flycheck - :type 'sexp - :risky t - :package-version '(flycheck . "0.20")) - -(defcustom flycheck-mode-line-prefix "FlyC" - "Base mode line lighter for Flycheck. - -This will have an effect only with the default -`flycheck-mode-line'. - -If you've customized `flycheck-mode-line' then the customized -function must be updated to use this variable." - :group 'flycheck - :type 'string - :package-version '(flycheck . "26")) - -(defcustom flycheck-error-list-mode-line - `(,(propertized-buffer-identification "%12b") - " for buffer " - (:eval (flycheck-error-list-propertized-source-name)) - (:eval (flycheck-error-list-mode-line-filter-indicator))) - "Mode line construct for Flycheck error list. - -The value of this variable is a mode line template as in -`mode-line-format', to be used as -`mode-line-buffer-identification' in `flycheck-error-list-mode'. -See Info Node `(elisp)Mode Line Format' for more information. - -Customize this variable to change how the error list appears in -the mode line. The default shows the name of the buffer and the -name of the source buffer, i.e. the buffer whose errors are -currently listed." - :group 'flycheck - :type 'sexp - :risky t - :package-version '(flycheck . "0.20")) - -(defcustom flycheck-global-modes t - "Modes for which option `flycheck-mode' is turned on. - -If t, Flycheck Mode is turned on for all major modes. If a list, -Flycheck Mode is turned on for all `major-mode' symbols in that -list. If the `car' of the list is `not', Flycheck Mode is turned -on for all `major-mode' symbols _not_ in that list. If nil, -Flycheck Mode is never turned on by command -`global-flycheck-mode'. - -Note that Flycheck is never turned on for modes whose -`mode-class' property is `special' (see Info node `(elisp)Major -Mode Conventions'), regardless of the value of this option. - -Only has effect when variable `global-flycheck-mode' is non-nil." - :group 'flycheck - :type '(choice (const :tag "none" nil) - (const :tag "all" t) - (set :menu-tag "mode specific" :tag "modes" - :value (not) - (const :tag "Except" not) - (repeat :inline t (symbol :tag "mode")))) - :risky t - :package-version '(flycheck . "0.23")) - -;; Add built-in functions to our hooks, via `add-hook', to make sure that our -;; functions are really present, even if the variable was implicitly defined by -;; another call to `add-hook' that occurred before Flycheck was loaded. See -;; http://lists.gnu.org/archive/html/emacs-devel/2015-02/msg01271.html for why -;; we don't initialize the hook variables right away. We append our own -;; functions, because a user likely expects that their functions come first, -;; even if they added them before Flycheck was loaded. -(dolist (hook (list #'flycheck-locate-config-file-by-path - #'flycheck-locate-config-file-ancestor-directories - #'flycheck-locate-config-file-home)) - (add-hook 'flycheck-locate-config-file-functions hook 'append)) - -(add-hook 'flycheck-process-error-functions #'flycheck-add-overlay 'append) - - -;;; Global Flycheck menu -(defvar flycheck-mode-menu-map - (easy-menu-create-menu - "Syntax Checking" - '(["Enable on-the-fly syntax checking" flycheck-mode - :style toggle :selected flycheck-mode - :enable (or flycheck-mode - ;; Don't let users toggle the mode if there is no syntax - ;; checker for this buffer - (seq-find #'flycheck-checker-supports-major-mode-p - flycheck-checkers))] - ["Check current buffer" flycheck-buffer flycheck-mode] - ["Clear errors in buffer" flycheck-clear t] - "---" - ["Go to next error" flycheck-next-error flycheck-mode] - ["Go to previous error" flycheck-previous-error flycheck-mode] - ["Show all errors" flycheck-list-errors flycheck-mode] - "---" - ["Copy messages at point" flycheck-copy-errors-as-kill - (flycheck-overlays-at (point))] - ["Explain error at point" flycheck-explain-error-at-point] - "---" - ["Select syntax checker" flycheck-select-checker flycheck-mode] - ["Disable syntax checker" flycheck-disable-checker flycheck-mode] - ["Set executable of syntax checker" flycheck-set-checker-executable - flycheck-mode] - "---" - ["Describe syntax checker" flycheck-describe-checker t] - ["Verify setup" flycheck-verify-setup t] - ["Show Flycheck version" flycheck-version t] - ["Read the Flycheck manual" flycheck-info t])) - "Menu of command `flycheck-mode'.") - -(easy-menu-add-item nil '("Tools") flycheck-mode-menu-map "Spell Checking") - - -;;; Version information, manual and loading of Flycheck -(defun flycheck-version (&optional show-version) - "Get the Flycheck version as string. - -If called interactively or if SHOW-VERSION is non-nil, show the -version in the echo area and the messages buffer. - -The returned string includes both, the version from package.el -and the library version, if both a present and different. - -If the version number could not be determined, signal an error, -if called interactively, or if SHOW-VERSION is non-nil, otherwise -just return nil." - (interactive (list t)) - (let ((version (pkg-info-version-info 'flycheck))) - (when show-version - (message "Flycheck version: %s" version)) - version)) - -(defun flycheck-unload-function () - "Unload function for Flycheck." - (global-flycheck-mode -1) - (easy-menu-remove-item nil '("Tools") (cadr flycheck-mode-menu-map)) - (remove-hook 'kill-emacs-hook #'flycheck-global-teardown) - (setq find-function-regexp-alist - (assq-delete-all 'flycheck-checker find-function-regexp-alist))) - -;;;###autoload -(defun flycheck-manual () - "Open the Flycheck manual." - (interactive) - (browse-url "http://www.flycheck.org")) - -(define-obsolete-function-alias 'flycheck-info - 'flycheck-manual "Flycheck 26" "Open the Flycheck manual.") - - -;;; Utility functions -(defun flycheck-sexp-to-string (sexp) - "Convert SEXP to a string. - -Like `prin1-to-string' but ensure that the returned string -is loadable." - (let ((print-quoted t) - (print-length nil) - (print-level nil)) - (prin1-to-string sexp))) - -(defun flycheck-string-to-number-safe (string) - "Safely convert STRING to a number. - -If STRING is of string type and a numeric string, convert STRING -to a number and return it. Otherwise return nil." - (let ((number-re (rx string-start (one-or-more (any digit)) string-end))) - (when (and (stringp string) (string-match-p number-re string)) - (string-to-number string)))) - -(defun flycheck-string-or-nil-p (obj) - "Determine if OBJ is a string or nil." - (or (null obj) (stringp obj))) - -(defun flycheck-string-list-p (obj) - "Determine if OBJ is a list of strings." - (and (listp obj) (seq-every-p #'stringp obj))) - -(defun flycheck-string-or-string-list-p (obj) - "Determine if OBJ is a string or a list of strings." - (or (stringp obj) (flycheck-string-list-p obj))) - -(defun flycheck-symbol-list-p (obj) - "Determine if OBJ is a list of symbols." - (and (listp obj) (seq-every-p #'symbolp obj))) - -(defvar-local flycheck--file-truename-cache nil) - -(defun flycheck--file-truename (file) - "Memoize the result of `file-truename' on (directory-file-name FILE)." - ;; `file-truename' is slow, but alternatives are incomplete, so memoizing is - ;; our best bet. See https://github.com/flycheck/flycheck/pull/1698. - (unless flycheck--file-truename-cache - (setq-local flycheck--file-truename-cache (make-hash-table :test 'equal))) - (or (gethash file flycheck--file-truename-cache) - (puthash file (file-truename (directory-file-name file)) - flycheck--file-truename-cache))) - -(defun flycheck-same-files-p (file-a file-b) - "Determine whether FILE-A and FILE-B refer to the same file. - -Files are the same if (in the order checked) they are equal, or -if they resolve to the same canonical paths." - (or (string= file-a file-b) - (string= (flycheck--file-truename file-a) - (flycheck--file-truename file-b)))) - -(defvar-local flycheck-temporaries nil - "Temporary files and directories created by Flycheck.") - -(defun flycheck-temp-dir-system () - "Create a unique temporary directory. - -Use `flycheck-temp-prefix' as prefix, and add the directory to -`flycheck-temporaries'. - -Return the path of the directory" - (let* ((tempdir (make-temp-file flycheck-temp-prefix 'directory))) - (push tempdir flycheck-temporaries) - tempdir)) - -(defun flycheck-temp-file-system (filename &optional suffix) - "Create a temporary file named after FILENAME. - -If FILENAME is non-nil, this function creates a temporary -directory with `flycheck-temp-dir-system', and creates a file -with the same name as FILENAME in this directory. - -Otherwise this function creates a temporary file starting with -`flycheck-temp-prefix'. If present, SUFFIX is appended; -otherwise, a random suffix is used. The path of the file is -added to `flycheck-temporaries'. - -Return the path of the file." - (let ((tempfile (convert-standard-filename - (if filename - (expand-file-name (file-name-nondirectory filename) - (flycheck-temp-dir-system)) - (make-temp-file flycheck-temp-prefix nil suffix))))) - (push tempfile flycheck-temporaries) - tempfile)) - -(defun flycheck-temp-file-inplace (filename &optional suffix) - "Create an in-place copy of FILENAME. - -Prefix the file with `flycheck-temp-prefix' and add the path of -the file to `flycheck-temporaries'. - -If FILENAME is nil, fall back to `flycheck-temp-file-system' with -the specified SUFFIX. - -Return the path of the file." - (if filename - (let* ((tempname (format "%s_%s" - flycheck-temp-prefix - (file-name-nondirectory filename))) - (tempfile (convert-standard-filename - (expand-file-name tempname - (file-name-directory filename))))) - (push tempfile flycheck-temporaries) - tempfile) - (flycheck-temp-file-system filename suffix))) - -(defun flycheck-temp-directory (checker) - "Return the directory where CHECKER writes temporary files. - -Return nil if the CHECKER does not write temporary files." - (let ((args (flycheck-checker-arguments checker))) - (cond - ((memq 'source args) temporary-file-directory) - ((memq 'source-inplace args) - (if buffer-file-name (file-name-directory buffer-file-name) - temporary-file-directory)) - (t nil)))) - -(defun flycheck-temp-files-writable-p (checker) - "Whether CHECKER can write temporary files. - -If CHECKER has `source' or `source-inplace' in its `:command', -return whether flycheck has the permissions to create the -respective temporary files. - -Return t if CHECKER does not use temporary files." - (let ((dir (flycheck-temp-directory checker))) - (or (not dir) (file-writable-p dir)))) - -(defun flycheck-save-buffer-to-file (file-name) - "Save the contents of the current buffer to FILE-NAME." - (make-directory (file-name-directory file-name) t) - (let ((jka-compr-inhibit t)) - (write-region nil nil file-name nil 0))) - -(defun flycheck-save-buffer-to-temp (temp-file-fn) - "Save buffer to temp file returned by TEMP-FILE-FN. - -Return the name of the temporary file." - (let ((filename (funcall temp-file-fn (buffer-file-name)))) - ;; Do not flush short-lived temporary files onto disk - (let ((write-region-inhibit-fsync t)) - (flycheck-save-buffer-to-file filename)) - filename)) - -(defun flycheck-prepend-with-option (option items &optional prepend-fn) - "Prepend OPTION to each item in ITEMS, using PREPEND-FN. - -Prepend OPTION to each item in ITEMS. - -ITEMS is a list of strings to pass to the syntax checker. OPTION -is the option, as string. PREPEND-FN is a function called to -prepend OPTION to each item in ITEMS. It receives the option and -a single item from ITEMS as argument, and must return a string or -a list of strings with OPTION prepended to the item. If -PREPEND-FN is nil or omitted, use `list'. - -Return a list of strings where OPTION is prepended to each item -in ITEMS using PREPEND-FN. If PREPEND-FN returns a list, it is -spliced into the resulting list." - (unless (stringp option) - (error "Option %S is not a string" option)) - (unless prepend-fn - (setq prepend-fn #'list)) - (let ((prepend - (lambda (item) - (let ((result (funcall prepend-fn option item))) - (cond - ((and (listp result) (seq-every-p #'stringp result)) result) - ((stringp result) (list result)) - (t (error "Invalid result type for option: %S" result))))))) - (apply #'append (seq-map prepend items)))) - -(defun flycheck-find-in-buffer (pattern) - "Find PATTERN in the current buffer. - -Return the result of the first matching group of PATTERN, or nil, -if PATTERN did not match." - (save-excursion - (save-restriction - (widen) - (goto-char (point-min)) - (when (re-search-forward pattern nil 'no-error) - (match-string-no-properties 1))))) - -(defun flycheck-buffer-empty-p (&optional buffer) - "Check whether a BUFFER is empty, defaulting to the current one." - (= (buffer-size buffer) 0)) - -(defun flycheck-buffer-nonempty-p (&optional buffer) - "Check whether a BUFFER is nonempty, defaulting to the current one." - (> (buffer-size buffer) 0)) - -(defun flycheck-ephemeral-buffer-p () - "Determine whether the current buffer is an ephemeral buffer. - -See Info node `(elisp)Buffer Names' for information about -ephemeral buffers." - (string-prefix-p " " (buffer-name))) - -(defun flycheck-encrypted-buffer-p () - "Determine whether the current buffer is an encrypted file. - -See Info node `(epa)Top' for Emacs' interface to encrypted -files." - ;; The EPA file handler sets this variable locally to remember the recipients - ;; of the encrypted file for re-encryption. Hence, a local binding of this - ;; variable is a good indication that the buffer is encrypted. I haven't - ;; found any better indicator anyway. - (local-variable-p 'epa-file-encrypt-to)) - -(defun flycheck-autoloads-file-p () - "Determine whether the current buffer is an autoloads file. - -Autoloads are generated by package.el during installation." - (string-suffix-p "-autoloads.el" (buffer-name))) - -(defun flycheck-in-user-emacs-directory-p (filename) - "Whether FILENAME is in `user-emacs-directory'." - (string-prefix-p (file-name-as-directory - (flycheck--file-truename user-emacs-directory)) - (flycheck--file-truename filename))) - -(defun flycheck-safe-delete (file-or-dir) - "Safely delete FILE-OR-DIR." - (ignore-errors - (if (file-directory-p file-or-dir) - (delete-directory file-or-dir 'recursive) - (delete-file file-or-dir)))) - -(defun flycheck-safe-delete-temporaries () - "Safely delete all temp files and directories of Flycheck. - -Safely delete all files and directories listed in -`flycheck-temporaries' and set the variable's value to nil." - (seq-do #'flycheck-safe-delete flycheck-temporaries) - (setq flycheck-temporaries nil)) - -(defun flycheck-rx-file-name (form) - "Translate the `(file-name)' FORM into a regular expression." - (let ((body (or (cdr form) '((minimal-match - (one-or-more not-newline)))))) - (rx-to-string `(group-n 1 ,@body) t))) - -(defun flycheck-rx-message (form) - "Translate the `(message)' FORM into a regular expression." - (let ((body (or (cdr form) '((one-or-more not-newline))))) - (rx-to-string `(group-n 4 ,@body) t))) - -(defun flycheck-rx-id (form) - "Translate the `(id)' FORM into a regular expression." - (rx-to-string `(group-n 5 ,@(cdr form)) t)) - -(defun flycheck-rx-to-string (form &optional no-group) - "Like `rx-to-string' for FORM, but with special keywords: - -`line' - matches the initial line number. - -`column' - matches the initial column number. - -`end-line' - matches the final line number. - -`end-column' - matches the final column number (exclusive). - - -`(file-name SEXP ...)' - matches the file name. SEXP describes the file name. If no - SEXP is given, use a default body of `(minimal-match - (one-or-more not-newline))'. - -`(message SEXP ...)' - matches the message. SEXP constitutes the body of the - message. If no SEXP is given, use a default body - of `(one-or-more not-newline)'. - -`(id SEXP ...)' - matches an error ID. SEXP describes the ID. - -NO-GROUP is passed to `rx-to-string'. - -See `rx' for a complete list of all built-in `rx' forms." - (let ((rx-constituents - (append - `((file-name flycheck-rx-file-name 0 nil) ;; group 1 - (line . ,(rx (group-n 2 (one-or-more digit)))) - (column . ,(rx (group-n 3 (one-or-more digit)))) - (message flycheck-rx-message 0 nil) ;; group 4 - (id flycheck-rx-id 0 nil) ;; group 5 - (end-line . ,(rx (group-n 6 (one-or-more digit)))) - (end-column . ,(rx (group-n 7 (one-or-more digit))))) - rx-constituents nil))) - (rx-to-string form no-group))) - -(defun flycheck-current-load-file () - "Get the source file currently being loaded. - -Always return the name of the corresponding source file, never -any byte-compiled file. - -Return nil, if the currently loaded file cannot be determined." - (-when-let* ((this-file (cond - (load-in-progress load-file-name) - ((bound-and-true-p byte-compile-current-file)) - (t (buffer-file-name)))) - ;; A best guess for the source file of a compiled library. Works - ;; well in most cases, and especially for ELPA packages - (source-file (concat (file-name-sans-extension this-file) - ".el"))) - (when (file-exists-p source-file) - source-file))) - -(defun flycheck-module-root-directory (module &optional file-name) - "Get the root directory for a MODULE in FILE-NAME. - -MODULE is a qualified module name, either a string with -components separated by a dot, or as list of components. -FILE-NAME is the name of the file or directory containing the -module as string. When nil or omitted, defaults to the return -value of function `buffer-file-name'. - -Return the root directory of the module, that is, the directory, -from which FILE-NAME can be reached by descending directories -along each part of MODULE. - -If the MODULE name does not match the directory hierarchy upwards -from FILE-NAME, return the directory containing FILE-NAME. When -FILE-NAME is nil, return `default-directory'." - (let ((file-name (or file-name (buffer-file-name))) - (module-components (if (stringp module) - (split-string module (rx ".")) - (copy-sequence module)))) - (if (and module-components file-name) - (let ((parts (nreverse module-components)) - (base-directory (directory-file-name - (file-name-sans-extension file-name)))) - (while (and parts - (string= (file-name-nondirectory base-directory) - (car parts))) - (pop parts) - (setq base-directory (directory-file-name - (file-name-directory base-directory)))) - (file-name-as-directory base-directory)) - (if file-name - (file-name-directory file-name) - (expand-file-name default-directory))))) - -(cl-defstruct (flycheck-line-cache - (:constructor flycheck-line-cache-new)) - "Cache structure used to speed up `flycheck-goto-line'." - tick point line) - -(defvar-local flycheck--line-cache nil - "Cache used to speed ip `flycheck-goto-line'.") - -(defsubst flycheck--init-line-cache () - "Initialize or reinitialize `flycheck--line-cache'." - (let ((tick (buffer-modified-tick))) - (if flycheck--line-cache - (unless (= (flycheck-line-cache-tick flycheck--line-cache) tick) - (setf (flycheck-line-cache-tick flycheck--line-cache) tick - (flycheck-line-cache-point flycheck--line-cache) 1 - (flycheck-line-cache-line flycheck--line-cache) 1)) - (setq-local flycheck--line-cache - (flycheck-line-cache-new :tick tick :point 1 :line 1))))) - -(defun flycheck-goto-line (line) - "Move point to beginning of line number LINE. - -This function assumes that the current buffer is not narrowed." - (flycheck--init-line-cache) - (goto-char (flycheck-line-cache-point flycheck--line-cache)) - (let ((delta (- line (flycheck-line-cache-line flycheck--line-cache)))) - (when (= 0 (forward-line delta)) - (setf (flycheck-line-cache-point flycheck--line-cache) (point)) - (setf (flycheck-line-cache-line flycheck--line-cache) line)))) - -(defun flycheck-line-column-to-position (line column) - "Return the point closest to LINE, COLUMN on line LINE. - -COLUMN is one-based." - (save-excursion - (flycheck-goto-line line) - (min (+ (point) (1- column)) (line-end-position)))) - -(defun flycheck-line-column-at-point () - "Return the line and column number at point." - (cons (line-number-at-pos) (1+ (- (point) (line-beginning-position))))) - -(defun flycheck-line-column-at-pos (pos) - "Return the line and column number at position POS. - -COLUMN is one-based." - (let ((inhibit-field-text-motion t)) - (save-excursion - (goto-char pos) - (flycheck-line-column-at-point)))) - - -;;; Minibuffer tools -(defvar flycheck-read-checker-history nil - "`completing-read' history of `flycheck-read-checker'.") - -(defun flycheck-completing-read (prompt candidates default &optional history) - "Read a value from the minibuffer. - -Use `flycheck-completing-read-function' to read input from the -minibuffer with completion. - -Show PROMPT and read one of CANDIDATES, defaulting to DEFAULT. -HISTORY is passed to `flycheck-completing-read-function'. - -Note that `flycheck-completing-read-function' may return an empty -string instead of nil, even when \"\" isn't among the candidates. -See `completing-read' for more details." - (funcall flycheck-completing-read-function - prompt candidates nil 'require-match nil history default)) - -(defun flycheck-read-checker (prompt &optional default property candidates) - "Read a flycheck checker from minibuffer with PROMPT and DEFAULT. - -PROMPT is a string to show in the minibuffer as prompt. It -should end with a single space. DEFAULT is a symbol denoting the -default checker to use, if the user did not select any checker. -PROPERTY is a symbol denoting a syntax checker property. If -non-nil, only complete syntax checkers which have a non-nil value -for PROPERTY. CANDIDATES is an optional list of all syntax -checkers available for completion, defaulting to all defined -checkers. If given, PROPERTY is ignored. - -Return the checker as symbol, or DEFAULT if no checker was -chosen. If DEFAULT is nil and no checker was chosen, signal a -`user-error' if the underlying completion system does not provide -a default on its own." - (when (and default (not (flycheck-valid-checker-p default))) - (error "%S is no valid Flycheck checker" default)) - (let* ((candidates (seq-map #'symbol-name - (or candidates - (flycheck-defined-checkers property)))) - (default (and default (symbol-name default))) - (input (flycheck-completing-read - prompt candidates default - 'flycheck-read-checker-history))) - (when (string-empty-p input) - (unless default - (user-error "No syntax checker selected")) - (setq input default)) - (let ((checker (intern input))) - (unless (flycheck-valid-checker-p checker) - (error "%S is not a valid Flycheck syntax checker" checker)) - checker))) - -(defun flycheck-read-error-level (prompt) - "Read an error level from the user with PROMPT. - -Only offers level for which errors currently exist, in addition -to the default levels." - (let* ((levels (seq-map #'flycheck-error-level - (flycheck-error-list-current-errors))) - (levels-with-defaults (append '(info warning error) levels)) - (uniq-levels (seq-uniq levels-with-defaults)) - (level (flycheck-completing-read prompt uniq-levels nil))) - (when (string-empty-p level) (setq level nil)) - (and level (intern level)))) - - -;;; Checker API -(defun flycheck-defined-checkers (&optional property) - "Find all defined syntax checkers, optionally with PROPERTY. - -PROPERTY is a symbol. If given, only return syntax checkers with -a non-nil value for PROPERTY. - -The returned list is sorted alphapetically by the symbol name of -the syntax checkers." - (let (defined-checkers) - (mapatoms (lambda (symbol) - (when (and (flycheck-valid-checker-p symbol) - (or (null property) - (flycheck-checker-get symbol property))) - (push symbol defined-checkers)))) - (sort defined-checkers #'string<))) - -(defun flycheck-registered-checker-p (checker) - "Determine whether CHECKER is registered. - -A checker is registered if it is contained in -`flycheck-checkers'." - (and (flycheck-valid-checker-p checker) - (memq checker flycheck-checkers))) - -(defun flycheck-disabled-checker-p (checker) - "Determine whether CHECKER is disabled, manually or automatically." - (or (flycheck-manually-disabled-checker-p checker) - (flycheck-automatically-disabled-checker-p checker))) - -(defun flycheck-manually-disabled-checker-p (checker) - "Determine whether CHECKER has been manually disabled. - -A checker has been manually disabled if it is contained in -`flycheck-disabled-checkers'." - (memq checker flycheck-disabled-checkers)) - -(defun flycheck-automatically-disabled-checker-p (checker) - "Determine whether CHECKER has been automatically disabled. - -A checker has been automatically disabled if it is contained in -`flycheck--automatically-disabled-checkers'." - (memq checker flycheck--automatically-disabled-checkers)) - - -;;; Generic syntax checkers -(defconst flycheck-generic-checker-version 2 - "The internal version of generic syntax checker declarations. - -Flycheck will not use syntax checkers whose generic version is -less than this constant.") - -(defsubst flycheck--checker-property-name (property) - "Return the SYMBOL property for checker PROPERTY." - (intern (concat "flycheck-" (symbol-name property)))) - -(defun flycheck-checker-get (checker property) - "Get the value of CHECKER's PROPERTY." - (get checker (flycheck--checker-property-name property))) - -(gv-define-setter flycheck-checker-get (value checker property) - `(setf (get ,checker (flycheck--checker-property-name ,property)) ,value)) - -(defun flycheck-validate-next-checker (next &optional strict) - "Validate NEXT checker. - -With STRICT non-nil, also check whether the syntax checker and -the error level in NEXT are valid. Otherwise just check whether -these are symbols. - -Signal an error if NEXT is not a valid entry for -`:next-checkers'." - (when (symbolp next) - (setq next (cons t next))) - (pcase next - (`(,level . ,checker) - (if strict - (progn - (unless (or (eq level t) (flycheck-error-level-p level)) - (error "%S is not a valid Flycheck error level" level)) - (unless (flycheck-valid-checker-p checker) - (error "%s is not a valid Flycheck syntax checker" checker))) - (unless (symbolp level) - (error "Error level %S must be a symbol" level)) - (unless (symbolp checker) - (error "Checker %S must be a symbol" checker)))) - (_ (error "%S must be a symbol or cons cell" next))) - t) - -(defun flycheck-define-generic-checker (symbol docstring &rest properties) - "Define SYMBOL as generic syntax checker. - -Any syntax checker defined with this macro is eligible for manual -syntax checker selection with `flycheck-select-checker'. To make -the new syntax checker available for automatic selection, it must -be registered in `flycheck-checkers'. - -DOCSTRING is the documentation of the syntax checker, for -`flycheck-describe-checker'. The following PROPERTIES constitute -a generic syntax checker. Unless otherwise noted, all properties -are mandatory. - -`:start FUNCTION' - A function to start the syntax checker. - - FUNCTION shall take two arguments and return a context - object if the checker is started successfully. Otherwise it - shall signal an error. - - The first argument is the syntax checker being started. The - second is a callback function to report state changes to - Flycheck. The callback takes two arguments STATUS DATA, - where STATUS is a symbol denoting the syntax checker status - and DATA an optional argument with additional data for the - status report. See `flycheck-report-buffer-checker-status' - for more information about STATUS and DATA. - - FUNCTION may be synchronous or asynchronous, i.e. it may - call the given callback either immediately, or at some later - point (e.g. from a process sentinel). - - A syntax checker _must_ call CALLBACK at least once with a - STATUS that finishes the current syntax checker. Otherwise - Flycheck gets stuck at the current syntax check with this - syntax checker. - - The context object returned by FUNCTION is passed to - `:interrupt'. - -`:interrupt FUNCTION' - A function to interrupt the syntax check. - - FUNCTION is called with the syntax checker and the context - object returned by the `:start' function and shall try to - interrupt the syntax check. The context may be nil, if the - syntax check is interrupted before actually started. - FUNCTION should handle this situation. - - If it cannot interrupt the syntax check, it may either - signal an error or silently ignore the attempt to interrupt - the syntax checker, depending on the severity of the - situation. - - If interrupting the syntax check failed, Flycheck will let - the syntax check continue, but ignore any status reports. - Notably, it won't highlight any errors reported by the - syntax check in the buffer. - - This property is optional. If omitted, Flycheck won't - attempt to interrupt syntax checks with this syntax checker, - and simply ignore their results. - -`:print-doc FUNCTION' - A function to print additional documentation into the Help - buffer of this checker. - - FUNCTION is called when creating the Help buffer for the - syntax checker, with the syntax checker as single argument, - after printing the name of the syntax checker and its modes - and predicate, but before printing DOCSTRING. It may insert - additional documentation into the current buffer. - - The call occurs within `with-help-window'. Hence - `standard-output' points to the current buffer, so you may - use `princ' and friends to add content. Also, the current - buffer is put into Help mode afterwards, which automatically - turns symbols into references, if possible. - - This property is optional. If omitted, no additional - documentation is printed for this syntax checker. - -:verify FUNCTION - A function to verify the checker for the current buffer. - - FUNCTION is called with the syntax checker as single - argument, and shall return a list of - `flycheck-verification-result' objects indicating whether - the syntax checker could be used in the current buffer, and - highlighting potential setup problems. - - This property is optional. If omitted, no additional - verification occurs for this syntax checker. It is however - absolutely recommended that you add a `:verify' function to - your syntax checker, because it will help users to spot - potential setup problems. - -`:modes MODES' - A major mode symbol or a list thereof, denoting major modes - to use this syntax checker in. - - This syntax checker will only be used in buffers whose - `major-mode' is contained in MODES. - - If `:predicate' is also given the syntax checker will only - be used in buffers for which the `:predicate' returns - non-nil. - -`:predicate FUNCTION' - A function to determine whether to use the syntax checker in - the current buffer. - - FUNCTION is called without arguments and shall return - non-nil if this syntax checker shall be used to check the - current buffer. Otherwise it shall return nil. - - If this checker has a `:working-directory' FUNCTION is - called with `default-directory' bound to the checker's - working directory. - - FUNCTION is only called in matching major modes. - - This property is optional. - -`:enabled FUNCTION' - A function to determine whether to use the syntax checker in - the current buffer. - - This property behaves as `:predicate', except that it's only - called the first time a syntax checker is to be used in a buffer. - - FUNCTION is called without arguments and shall return - non-nil if this syntax checker shall be used to check the - current buffer. Otherwise it shall return nil. - - If FUNCTION returns a non-nil value the checker is put in a - whitelist in `flycheck--automatically-enabled-checkers' to - prevent further invocations of `:enabled'. Otherwise it is - disabled via `flycheck--automatically-disabled-checkers' to - prevent any further use of it. - - If this checker has a `:working-directory' FUNCTION is - called with `default-directory' bound to the checker's - working directory. - - FUNCTION is only called in matching major modes. - - This property is optional. - -`:error-filter FUNCTION' - A function to filter the errors returned by this checker. - - FUNCTION is called with the list of `flycheck-error' objects - returned by the syntax checker and shall return another list - of `flycheck-error' objects, which is considered the final - result of this syntax checker. - - FUNCTION is free to add, remove or modify errors, whether in - place or by copying. - - This property is optional. The default filter is - `identity'. - -`:error-explainer FUNCTION' - A function to return an explanation text for errors - generated by this checker. - - FUNCTION is called with a `flycheck-error' object, in the - buffer of that error. It shall return an explanation - message for the error. - - The message can take any of the following forms: - - A string, which will be displayed to the user - - A function (likely a closure), which will be called with - `standard-output' set to a `flycheck-explain-error-mode' - buffer, and should write to it. - - A cons `(url . ,URL), indicating that the explanation can - be found online at URL. - - nil if there is no explanation for this error. - - This property is optional. - -`:next-checkers NEXT-CHECKERS' - A list denoting syntax checkers to apply after this syntax - checker, in what we call \"chaining\" of syntax checkers. - - Each ITEM is a cons cell `(LEVEL . CHECKER)'. CHECKER is a - syntax checker to run after this syntax checker. LEVEL is - an error level. CHECKER will only be used if there are no - current errors of at least LEVEL. LEVEL may also be t, in - which case CHECKER is used regardless of the current errors. - - ITEM may also be a syntax checker symbol, which is - equivalent to `(t . ITEM)'. - - Flycheck tries all items in order of declaration, and uses - the first whose LEVEL matches and whose CHECKER is - registered and can be used for the current buffer. - - This feature is typically used to apply more than one syntax - checker to a buffer. For instance, you might first use a - compiler to check a buffer for syntax and type errors, and - then run a linting tool that checks for insecure code, or - questionable style. - - This property is optional. If omitted, it defaults to the - nil, i.e. no other syntax checkers are applied after this - syntax checker. - -`:working-directory FUNCTION' - The value of `default-directory' when invoking `:start'. - - FUNCTION is a function taking the syntax checker as sole - argument. It shall return the absolute path to an existing - directory to use as `default-directory' for `:start' or - nil to fall back to the `default-directory' of the current - buffer. - - This property is optional. If omitted, invoke `:start' - from the `default-directory' of the buffer being checked. - -Signal an error, if any property has an invalid value." - (declare (indent 1) - (doc-string 2)) - (let ((start (plist-get properties :start)) - (interrupt (plist-get properties :interrupt)) - (print-doc (plist-get properties :print-doc)) - (modes (plist-get properties :modes)) - (predicate (plist-get properties :predicate)) - (verify (plist-get properties :verify)) - (enabled (plist-get properties :enabled)) - (filter (or (plist-get properties :error-filter) #'identity)) - (explainer (plist-get properties :error-explainer)) - (next-checkers (plist-get properties :next-checkers)) - (file (flycheck-current-load-file)) - (working-directory (plist-get properties :working-directory))) - - (unless (listp modes) - (setq modes (list modes))) - - (unless (functionp start) - (error ":start %S of syntax checker %s is not a function" start symbol)) - (unless (or (null interrupt) (functionp interrupt)) - (error ":interrupt %S of syntax checker %s is not a function" - interrupt symbol)) - (unless (or (null print-doc) (functionp print-doc)) - (error ":print-doc %S of syntax checker %s is not a function" - print-doc symbol)) - (unless (or (null verify) (functionp verify)) - (error ":verify %S of syntax checker %S is not a function" - verify symbol)) - (unless (or (null enabled) (functionp enabled)) - (error ":enabled %S of syntax checker %S is not a function" - enabled symbol)) - (unless modes - (error "Missing :modes in syntax checker %s" symbol)) - (dolist (mode modes) - (unless (symbolp mode) - (error "Invalid :modes %s in syntax checker %s, %s must be a symbol" - modes symbol mode))) - (unless (or (null predicate) (functionp predicate)) - (error ":predicate %S of syntax checker %s is not a function" - predicate symbol)) - (unless (functionp filter) - (error ":error-filter %S of syntax checker %s is not a function" - filter symbol)) - (unless (or (null explainer) (functionp explainer)) - (error ":error-explainer %S of syntax checker %S is not a function" - explainer symbol)) - (dolist (checker next-checkers) - (flycheck-validate-next-checker checker)) - - (let ((real-predicate - (and predicate - (lambda () - ;; Run predicate in the checker's default directory - (let ((default-directory - (flycheck-compute-working-directory symbol))) - (funcall predicate))))) - (real-enabled - (lambda () - (if (flycheck-valid-checker-p symbol) - (or (null enabled) - ;; Run enabled in the checker's default directory - (let ((default-directory - (flycheck-compute-working-directory symbol))) - (funcall enabled))) - (lwarn 'flycheck - :warning "%S is no valid Flycheck syntax checker. -Try to reinstall the package defining this syntax checker." symbol) - nil)))) - (pcase-dolist (`(,prop . ,value) - `((start . ,start) - (interrupt . ,interrupt) - (print-doc . ,print-doc) - (modes . ,modes) - (predicate . ,real-predicate) - (verify . ,verify) - (enabled . ,real-enabled) - (error-filter . ,filter) - (error-explainer . ,explainer) - (next-checkers . ,next-checkers) - (documentation . ,docstring) - (file . ,file) - (working-directory . ,working-directory))) - (setf (flycheck-checker-get symbol prop) value))) - - ;; Track the version, to avoid breakage if the internal format changes - (setf (flycheck-checker-get symbol 'generic-checker-version) - flycheck-generic-checker-version))) - -(defun flycheck-valid-checker-p (checker) - "Check whether a CHECKER is valid. - -A valid checker is a symbol defined as syntax checker with -`flycheck-define-checker'." - (and (symbolp checker) - (= (or (get checker 'flycheck-generic-checker-version) 0) - flycheck-generic-checker-version))) - -(defun flycheck-checker-supports-major-mode-p (checker &optional mode) - "Whether CHECKER supports the given major MODE. - -CHECKER is a syntax checker symbol and MODE a major mode symbol. -Look at the `modes' property of CHECKER to determine whether -CHECKER supports buffers in the given major MODE. - -MODE defaults to the value of `major-mode' if omitted or nil. - -Return non-nil if CHECKER supports MODE and nil otherwise." - (let ((mode (or mode major-mode))) - (memq mode (flycheck-checker-get checker 'modes)))) - -(define-obsolete-variable-alias 'flycheck-enabled-checkers - 'flycheck--automatically-enabled-checkers "32") - -(defvar flycheck--automatically-enabled-checkers nil - "Syntax checkers included in automatic selection. - -A list of Flycheck syntax checkers included in automatic -selection for the current buffer.") -(make-variable-buffer-local 'flycheck--automatically-enabled-checkers) - -(defun flycheck-may-enable-checker (checker) - "Whether a generic CHECKER may be enabled for current buffer. - -Return non-nil if CHECKER may be used for the current buffer, and -nil otherwise. The result of the `:enabled' check, if any, is -cached." - (and - ;; May only enable valid checkers - (flycheck-valid-checker-p checker) - ;; Don't run the :enabled check if the checker is already disabled… - (not (flycheck-disabled-checker-p checker)) - (or - ;; …or if we've already cached the result - (memq checker flycheck--automatically-enabled-checkers) - (let* ((enabled (flycheck-checker-get checker 'enabled)) - (may-enable (or (null enabled) (funcall enabled)))) - ;; Cache the result - (if may-enable - (cl-pushnew checker flycheck--automatically-enabled-checkers) - (cl-pushnew checker flycheck--automatically-disabled-checkers)) - may-enable)))) - -(defun flycheck-reset-enabled-checker (checker) - "Reset the `:enabled' test of CHECKER. - -Forget that CHECKER has been enabled or automatically disabled -from a previous `:enabled' test. The result of the `:enabled' -test is cached in `flycheck-may-enable-checker': if you wish to -test the `:enabled' predicate again, you must first reset its -state using this function." - (when (memq checker flycheck--automatically-disabled-checkers) - (setq flycheck--automatically-disabled-checkers - (remq checker flycheck--automatically-disabled-checkers))) - (when (memq checker flycheck--automatically-enabled-checkers) - (setq flycheck--automatically-enabled-checkers - (remq checker flycheck--automatically-enabled-checkers))) - (flycheck-buffer)) - -(defun flycheck-may-use-checker (checker) - "Whether a generic CHECKER may be used. - -Return non-nil if CHECKER may be used for the current buffer, and -nil otherwise." - (let ((predicate (flycheck-checker-get checker 'predicate))) - (and (flycheck-valid-checker-p checker) - (flycheck-checker-supports-major-mode-p checker) - (flycheck-may-enable-checker checker) - (or (null predicate) (funcall predicate))))) - -(defun flycheck-may-use-next-checker (next-checker) - "Determine whether NEXT-CHECKER may be used." - (when (symbolp next-checker) - (push t next-checker)) - (let ((level (car next-checker)) - (next-checker (cdr next-checker))) - (and (or (eq level t) - (flycheck-has-max-current-errors-p level)) - (flycheck-registered-checker-p next-checker) - (flycheck-may-use-checker next-checker)))) - - -;;; Help for generic syntax checkers -(define-button-type 'help-flycheck-checker-def - :supertype 'help-xref - 'help-function #'flycheck-goto-checker-definition - 'help-echo "mouse-1, RET: find Flycheck checker definition") - -(defconst flycheck-find-checker-regexp - (rx line-start (zero-or-more (syntax whitespace)) - "(" symbol-start - (or "flycheck-define-checker" "flycheck-define-command-checker") - symbol-end - (eval (list 'regexp find-function-space-re)) - (? "'") - symbol-start "%s" symbol-end - (or (syntax whitespace) line-end)) - "Regular expression to find a checker definition.") - -(add-to-list 'find-function-regexp-alist - '(flycheck-checker . flycheck-find-checker-regexp)) - -(defun flycheck-goto-checker-definition (checker file) - "Go to to the definition of CHECKER in FILE." - (let ((location (find-function-search-for-symbol - checker 'flycheck-checker file))) - (pop-to-buffer (car location)) - (if (cdr location) - (goto-char (cdr location)) - (message "Unable to find checker location in file")))) - -(defun flycheck-checker-at-point () - "Return the Flycheck checker found at or before point. - -Return nil if there is no checker." - (let ((symbol (variable-at-point 'any-symbol))) - (when (flycheck-valid-checker-p symbol) - symbol))) - -(defun flycheck-describe-checker (checker) - "Display the documentation of CHECKER. - -CHECKER is a checker symbol. - -Pop up a help buffer with the documentation of CHECKER." - (interactive - (let* ((enable-recursive-minibuffers t) - (default (or (flycheck-checker-at-point) - (ignore-errors (flycheck-get-checker-for-buffer)))) - (prompt (if default - (format "Describe syntax checker (default %s): " default) - "Describe syntax checker: "))) - (list (flycheck-read-checker prompt default)))) - (unless (flycheck-valid-checker-p checker) - (user-error "You didn't specify a Flycheck syntax checker")) - (let ((filename (flycheck-checker-get checker 'file)) - (modes (flycheck-checker-get checker 'modes)) - (predicate (flycheck-checker-get checker 'predicate)) - (print-doc (flycheck-checker-get checker 'print-doc)) - (next-checkers (flycheck-checker-get checker 'next-checkers)) - (help-xref-following - ;; Ensure that we don't reuse buffers like `flycheck-verify-checker', - ;; and that we don't error out if a `help-flycheck-checker-doc' button - ;; is added outside of a documentation window. - (and help-xref-following (eq major-mode 'help-mode)))) - (help-setup-xref (list #'flycheck-describe-checker checker) - (called-interactively-p 'interactive)) - (save-excursion - (with-help-window (help-buffer) - (princ (format "%s is a Flycheck syntax checker" checker)) - (when filename - (princ (format " in `%s'" (file-name-nondirectory filename))) - (with-current-buffer standard-output - (save-excursion - (re-search-backward "`\\([^`']+\\)'" nil t) - (help-xref-button 1 'help-flycheck-checker-def - checker filename)))) - (princ ".\n\n") - - (let ((modes-start (with-current-buffer standard-output (point-max)))) - ;; Track the start of the modes documentation, to properly re-fill - ;; it later - (princ " This syntax checker checks syntax in the major mode(s) ") - (princ (string-join - (seq-map (apply-partially #'format "`%s'") modes) - ", ")) - (when predicate - (princ ", and uses a custom predicate")) - (princ ".") - (when next-checkers - (princ " It runs the following checkers afterwards:")) - (with-current-buffer standard-output - (save-excursion - (fill-region-as-paragraph modes-start (point-max)))) - (princ "\n") - - ;; Print the list of next checkers - (when next-checkers - (princ "\n") - (let ((beg-checker-list (with-current-buffer standard-output - (point)))) - (dolist (next-checker next-checkers) - (if (symbolp next-checker) - (princ (format " * `%s'\n" next-checker)) - (princ (format " * `%s' (maximum level `%s')\n" - (cdr next-checker) (car next-checker))))) - ;; - (with-current-buffer standard-output - (save-excursion - (while (re-search-backward "`\\([^`']+\\)'" - beg-checker-list t) - (let ((checker (intern-soft (match-string 1)))) - (when (flycheck-valid-checker-p checker) - (help-xref-button 1 'help-flycheck-checker-doc - checker))))))))) - ;; Call the custom print-doc function of the checker, if present - (when print-doc - (funcall print-doc checker)) - ;; Ultimately, print the docstring - (princ "\nDocumentation:\n") - (princ (flycheck-checker-get checker 'documentation)))))) - - -;;; Syntax checker verification -(cl-defstruct (flycheck-verification-result - (:constructor flycheck-verification-result-new)) - "Structure for storing a single verification result. - -Slots: - -`label' - A label for this result, as string - -`message' - A message for this result, as string - -`face' - The face to use for the `message'. - - You can either use a face symbol, or a list of face symbols." - label message face) - -(defun flycheck-verify-generic-checker (checker) - "Verify a generic CHECKER in the current buffer. - -Return a list of `flycheck-verification-result' objects." - (let (results - (predicate (flycheck-checker-get checker 'predicate)) - (enabled (flycheck-checker-get checker 'enabled)) - (verify (flycheck-checker-get checker 'verify))) - (when enabled - (let ((result (funcall enabled))) - (push (flycheck-verification-result-new - :label (propertize "may enable" 'help-echo ":enable") - :message (if result "yes" "no") - :face (if result 'success '(bold warning))) - results))) - (when predicate - (let ((result (funcall predicate))) - (push (flycheck-verification-result-new - :label (propertize "may run" 'help-echo ":predicate") - :message (prin1-to-string (not (null result))) - :face (if result 'success '(bold warning))) - results))) - (append (nreverse results) - (and verify (funcall verify checker))))) - -(define-button-type 'help-flycheck-checker-doc - :supertype 'help-xref - 'help-function #'flycheck-describe-checker - 'help-echo "mouse-1, RET: describe Flycheck checker") - -(define-button-type 'flycheck-button - 'follow-link t - 'action (lambda (pos) - (apply (get-text-property pos 'flycheck-action) - (get-text-property pos 'flycheck-data)) - ;; Revert the verify-setup buffer since it is now stale - (revert-buffer)) - 'face 'flycheck-verify-select-checker) - -(define-button-type 'flycheck-checker-select - :supertype 'flycheck-button - 'flycheck-action (lambda (buffer checker) - (with-current-buffer buffer - (flycheck-select-checker checker))) - 'help-echo "mouse-1, RET: select this checker") - -(define-button-type 'flycheck-checker-enable - :supertype 'flycheck-button - 'flycheck-action (lambda (buffer checker) - (interactive) - (with-current-buffer buffer - (flycheck--toggle-checker checker t) - (flycheck-buffer))) - 'help-echo "mouse-1, RET: re-enable this checker in this buffer") - -(define-button-type 'flycheck-checker-reset-enabled - :supertype 'flycheck-button - 'flycheck-action (lambda (buffer checker) - (with-current-buffer buffer - (flycheck-reset-enabled-checker checker))) - 'help-echo "mouse-1, RET: try to re-enable this checker") - -(defun flycheck--verify-princ-checker (checker buffer - &optional with-mm with-select) - "Print verification result of CHECKER for BUFFER. - -When WITH-MM is given and non-nil, also include the major mode -into the verification results. - -When WITH-SELECT is non-nil, add a button to select this checker." - (princ " ") - (insert-button (symbol-name checker) - 'type 'help-flycheck-checker-doc - 'help-args (list checker)) - (cond - ((with-current-buffer buffer - (flycheck-manually-disabled-checker-p checker)) - (insert (propertize " (manually disabled) " 'face '(bold error))) - (insert-text-button "enable" - 'type 'flycheck-checker-enable - 'flycheck-data (list buffer checker))) - ((with-current-buffer buffer - (flycheck-automatically-disabled-checker-p checker)) - (insert (propertize " (automatically disabled) " 'face '(bold error))) - (insert-text-button "reset" - 'type 'flycheck-checker-reset-enabled - 'flycheck-data (list buffer checker)))) - (when (eq checker (buffer-local-value 'flycheck-checker buffer)) - (insert (propertize " (explicitly selected)" 'face 'bold))) - (when with-select - (princ " ") - (insert-text-button "select" - 'type 'flycheck-checker-select - 'flycheck-data (list buffer checker))) - (princ "\n") - (let ((results (with-current-buffer buffer - (append (flycheck-verify-generic-checker checker) - (flycheck--verify-next-checkers checker))))) - (when with-mm - (with-current-buffer buffer - (let ((message-and-face - (if (flycheck-checker-supports-major-mode-p checker) - (cons (format "`%s' supported" major-mode) 'success) - (cons (format "`%s' not supported" major-mode) 'error)))) - (push (flycheck-verification-result-new - :label "major mode" - :message (car message-and-face) - :face (cdr message-and-face)) - results)))) - (let* ((label-length - (seq-max (mapcar - (lambda (res) - (length (flycheck-verification-result-label res))) - results))) - (message-column (+ 8 label-length))) - (dolist (result results) - (princ " - ") - (princ (flycheck-verification-result-label result)) - (princ ": ") - (princ (make-string (- message-column (current-column)) ?\ )) - (let ((message (flycheck-verification-result-message result)) - (face (flycheck-verification-result-face result))) - ;; If face is nil, using propertize erases the face already contained - ;; by the message. We don't want that, since this would remove the - ;; button face from the checker chain result. - (insert (if face (propertize message 'face face) message))) - (princ "\n")))) - (princ "\n")) - -(defun flycheck--get-next-checker-symbol (next) - "Get the checker symmbol of NEXT checker. - -NEXT should be either a cons (NEXT-CHECKER . LEVEL) or a -symbol." - (if (consp next) (cdr next) next)) - -(defun flycheck-get-next-checkers (checker) - "Return the immediate next checkers of CHECKER. - -This is a list of checker symbols. The error levels of the -`:next-checker' property are ignored." - (mapcar #'flycheck--get-next-checker-symbol - (flycheck-checker-get checker 'next-checkers))) - -(defun flycheck-all-next-checkers (checker) - "Return all checkers that may follow CHECKER. - -Return the transitive closure of the next-checker relation. The -return value is a list of checkers, not including CHECKER." - (let ((next-checkers) - (visited) - (queue (list checker))) - (while queue - (let ((c (pop queue))) - (push c visited) - (dolist (n (flycheck-get-next-checkers c)) - (push n next-checkers) - (unless (memq n visited) - (cl-pushnew n queue))))) - (seq-uniq next-checkers))) - -(defun flycheck--verify-next-checkers (checker) - "Return a verification result for the next checkers of CHECKER." - (-when-let (next (flycheck-get-next-checkers checker)) - (list - (flycheck-verification-result-new - :label "next checkers" - ;; We use `make-text-button' to preserve the button properties in the - ;; string - :message (mapconcat - (lambda (checker) - (make-text-button (symbol-name checker) nil - 'type 'help-flycheck-checker-doc - 'help-args (list checker))) - next - ", "))))) - -(defun flycheck--verify-print-header (desc buffer) - "Print a title with DESC for BUFFER in the current buffer. - -DESC is an arbitrary string containing a description, and BUFFER -is the buffer being verified. The name and the major mode mode -of BUFFER are printed. - -DESC and information about BUFFER are printed in the current -buffer." - (princ desc) - (insert (propertize (buffer-name buffer) 'face 'bold)) - (princ " in ") - (let ((mode (buffer-local-value 'major-mode buffer))) - (insert-button (symbol-name mode) - 'type 'help-function - 'help-args (list mode))) - (princ ":\n\n")) - -(defun flycheck--verify-print-footer (buffer) - "Print a footer for BUFFER in the current buffer. - -BUFFER is the buffer being verified." - (princ "Flycheck Mode is ") - (let ((enabled (buffer-local-value 'flycheck-mode buffer))) - (insert (propertize (if enabled "enabled" "disabled") - 'face (if enabled 'success '(warning bold))))) - (princ - (with-current-buffer buffer - ;; Use key binding state in the verified buffer to print the help. - (substitute-command-keys - ". Use \\[universal-argument] \\[flycheck-disable-checker] \ -to enable disabled checkers."))) - (save-excursion - (let ((end (point))) - (backward-paragraph) - (fill-region-as-paragraph (point) end))) - - (princ "\n\n--------------------\n\n") - (princ (format "Flycheck version: %s\n" (flycheck-version))) - (princ (format "Emacs version: %s\n" emacs-version)) - (princ (format "System: %s\n" system-configuration)) - (princ (format "Window system: %S\n" window-system))) - -(define-derived-mode flycheck-verify-mode help-mode - "Flycheck verification" - "Major mode to display Flycheck verification results." - ;; `help-mode-finish' will restore `buffer-read-only' - (setq buffer-read-only nil)) - -(defun flycheck-verify-checker (checker) - "Check whether a CHECKER can be used in this buffer. - -Show a buffer listing possible problems that prevent CHECKER from -being used for the current buffer. - -Note: Do not use this function to check whether a syntax checker -is applicable from Emacs Lisp code. Use -`flycheck-may-use-checker' instead." - (interactive (list (flycheck-read-checker "Checker to verify: "))) - (unless (flycheck-valid-checker-p checker) - (user-error "%s is not a syntax checker" checker)) - - ;; Save the buffer to make sure that all predicates are good - ;; FIXME: this may be surprising to users, with unintended side-effects. - (when (and (buffer-file-name) (buffer-modified-p)) - (save-buffer)) - - (let ((buffer (current-buffer))) - (with-help-window "*Flycheck checker*" - (with-current-buffer standard-output - (flycheck-verify-mode) - (flycheck--verify-print-header "Syntax checker in buffer " buffer) - (flycheck--verify-princ-checker checker buffer 'with-mm) - (if (with-current-buffer buffer (flycheck-may-use-checker checker)) - (insert (propertize - "Flycheck can use this syntax checker for this buffer.\n" - 'face 'success)) - (insert (propertize - "Flycheck cannot use this syntax checker for this buffer.\n" - 'face 'error))) - (insert "\n") - (flycheck--verify-print-footer buffer))))) - -(defun flycheck-verify-setup () - "Check whether Flycheck can be used in this buffer. - -Display a new buffer listing all syntax checkers that could be -applicable in the current buffer. For each syntax checkers, -possible problems are shown." - (interactive) - ;; Save to make sure checkers that only work on saved buffers will pass the - ;; verification - (when (and (buffer-file-name) (buffer-modified-p)) - (save-buffer)) - - (let* ((buffer (current-buffer)) - (first-checker (flycheck-get-checker-for-buffer)) - (valid-checkers - (remq first-checker - (seq-filter #'flycheck-may-use-checker flycheck-checkers))) - (valid-next-checkers - (when first-checker - (seq-intersection valid-checkers - (flycheck-all-next-checkers first-checker)))) - (valid-remaining (seq-difference valid-checkers valid-next-checkers)) - (other-checkers - (seq-difference (seq-filter #'flycheck-checker-supports-major-mode-p - flycheck-checkers) - (cons first-checker valid-checkers)))) - - ;; Print all applicable checkers for this buffer - (with-help-window "*Flycheck checkers*" - (with-current-buffer standard-output - (flycheck-verify-mode) - - (flycheck--verify-print-header "Syntax checkers for buffer " buffer) - - (if first-checker - (progn - (princ "First checker to run:\n\n") - (flycheck--verify-princ-checker first-checker buffer)) - (insert (propertize - "No checker to run in this buffer.\n\n" - 'face '(bold error)))) - - (when valid-next-checkers - (princ - "Checkers that may run as part of the first checker's chain:\n\n") - (dolist (checker valid-next-checkers) - (flycheck--verify-princ-checker checker buffer))) - - (when valid-remaining - (princ "Checkers that could run if selected:\n\n") - (dolist (checker valid-remaining) - (flycheck--verify-princ-checker checker buffer nil 'with-select))) - - (when other-checkers - (princ - "Checkers that are compatible with this mode, \ -but will not run until properly configured:\n\n") - (dolist (checker other-checkers) - (flycheck--verify-princ-checker checker buffer))) - - ;; If we have no checkers at all, that's worth mentioning - (unless (or first-checker valid-checkers other-checkers) - (insert (propertize - "No checkers are available for this buffer.\n\n" - 'face '(bold error)))) - - (let ((unregistered-checkers - (seq-difference (flycheck-defined-checkers) flycheck-checkers))) - (when unregistered-checkers - (insert (propertize - "The following syntax checkers are not registered:\n" - 'face '(bold warning))) - (dolist (checker unregistered-checkers) - (princ " - ") - (princ checker) - (princ "\n")) - (princ - "Try adding these syntax checkers to `flycheck-checkers'.\n\n"))) - - (flycheck--verify-print-footer buffer) - - (setq-local revert-buffer-function - (lambda (_ignore-auto _noconfirm) - (with-current-buffer buffer (flycheck-verify-setup)))))))) - - -;;; Predicates for generic syntax checkers -(defun flycheck-buffer-saved-p (&optional buffer) - "Determine whether BUFFER is saved to a file. - -BUFFER is the buffer to check. If omitted or nil, use the -current buffer as BUFFER. - -Return non-nil if the BUFFER is backed by a file, and not -modified, or nil otherwise." - (let ((file-name (buffer-file-name buffer))) - (and file-name (file-exists-p file-name) (not (buffer-modified-p buffer))))) - - -;;; Extending generic checkers -(defun flycheck-remove-next-checker (checker next) - "After CHECKER remove a NEXT checker. - -CHECKER is a syntax checker symbol, from which to remove NEXT -checker. - -NEXT is a cons or a symbol, as documented in -`flycheck-add-next-checker'." - (unless (flycheck-valid-checker-p checker) - (error "%s is not a valid syntax checker" checker)) - (let* ((next-symbol (flycheck--get-next-checker-symbol next))) - (setf - (flycheck-checker-get checker 'next-checkers) - (seq-remove - (lambda (next) (eq (flycheck--get-next-checker-symbol next) next-symbol)) - (flycheck-checker-get checker 'next-checkers))))) - -(defun flycheck-add-next-checker (checker next &optional append) - "After CHECKER add a NEXT checker. - -CHECKER is a syntax checker symbol, to which to add NEXT checker. - -NEXT is a cons cell `(LEVEL . NEXT-CHECKER)'. NEXT-CHECKER is a -symbol denoting the syntax checker to run after CHECKER. LEVEL -is an error level. NEXT-CHECKER will only be used if there is no -current error whose level is more severe than LEVEL. LEVEL may -also be t, in which case NEXT-CHECKER is used regardless of the -current errors. - -NEXT can also be a syntax checker symbol only, which is -equivalent to `(t . NEXT)'. - -NEXT-CHECKER is prepended before other next checkers, unless -APPEND is non-nil." - (unless (flycheck-valid-checker-p checker) - (error "%s is not a valid syntax checker" checker)) - (flycheck-validate-next-checker next 'strict) - (flycheck-remove-next-checker checker next) - (let ((next-checkers (flycheck-checker-get checker 'next-checkers))) - (setf (flycheck-checker-get checker 'next-checkers) - (if append (append next-checkers (list next)) - (cons next next-checkers))))) - -(defun flycheck-add-mode (checker mode) - "To CHECKER add a new major MODE. - -CHECKER and MODE are symbols denoting a syntax checker and a -major mode respectively. - -Add MODE to the `:modes' property of CHECKER, so that CHECKER -will be used in buffers with MODE." - (unless (flycheck-valid-checker-p checker) - (error "%s is not a valid syntax checker" checker)) - (unless (symbolp mode) - (error "%s is not a symbol" mode)) - (push mode (flycheck-checker-get checker 'modes))) - - -;;; Generic syntax checks -(cl-defstruct (flycheck-syntax-check - (:constructor flycheck-syntax-check-new)) - "Structure for storing syntax check state. - -Slots: - -`buffer' - The buffer being checked. - -`checker' - The syntax checker being used. - -`context' - The context object. - -`working-directory' - Working directory for the syntax checker. Serve as a value for - `default-directory' for a checker." - buffer checker context working-directory) - -(defun flycheck-syntax-check-start (syntax-check callback) - "Start a SYNTAX-CHECK with CALLBACK." - (let ((checker (flycheck-syntax-check-checker syntax-check)) - (default-directory - (flycheck-syntax-check-working-directory syntax-check))) - (setf (flycheck-syntax-check-context syntax-check) - (funcall (flycheck-checker-get checker 'start) checker callback)))) - -(defun flycheck-syntax-check-interrupt (syntax-check) - "Interrupt a SYNTAX-CHECK." - (let* ((checker (flycheck-syntax-check-checker syntax-check)) - (interrupt-fn (flycheck-checker-get checker 'interrupt)) - (context (flycheck-syntax-check-context syntax-check))) - (when interrupt-fn - (funcall interrupt-fn checker context)))) - - -;;; Syntax checking mode - -(defvar flycheck-mode-map - (let ((map (make-sparse-keymap))) - (define-key map flycheck-keymap-prefix flycheck-command-map) - ;; We place the menu under a custom menu key. Since this menu key is not - ;; present in the menu of the global map, no top-level menu entry is added - ;; to the global menu bar. However, it still appears on the mode line - ;; lighter. - (define-key map [menu-bar flycheck] flycheck-mode-menu-map) - map) - "Keymap of command `flycheck-mode'.") - -(defvar-local flycheck-old-next-error-function nil - "Remember the old `next-error-function'.") - -(defconst flycheck-hooks-alist - '( - ;; Handle events that may start automatic syntax checks - (after-save-hook . flycheck-handle-save) - (after-change-functions . flycheck-handle-change) - ;; Handle events that may triggered pending deferred checks - (window-configuration-change-hook . flycheck-perform-deferred-syntax-check) - (post-command-hook . flycheck-perform-deferred-syntax-check) - ;; Teardown Flycheck whenever the buffer state is about to get lost, to - ;; clean up temporary files and directories. - (kill-buffer-hook . flycheck-teardown) - (change-major-mode-hook . flycheck-teardown) - (before-revert-hook . flycheck-teardown) - ;; Update the error list if necessary - (post-command-hook . flycheck-error-list-update-source) - (post-command-hook . flycheck-error-list-highlight-errors) - ;; Display errors. Show errors at point after commands (like movements) and - ;; when Emacs gets focus. Cancel the display timer when Emacs looses focus - ;; (as there's no need to display errors if the user can't see them), and - ;; hide the error buffer (for large error messages) if necessary. Note that - ;; the focus hooks only work on Emacs 24.4 and upwards, but since undefined - ;; hooks are perfectly ok we don't need a version guard here. They'll just - ;; not work silently. - (post-command-hook . flycheck-maybe-display-error-at-point-soon) - (focus-in-hook . flycheck-display-error-at-point-soon) - (focus-out-hook . flycheck-cancel-error-display-error-at-point-timer) - (post-command-hook . flycheck-hide-error-buffer) - ;; Immediately show error popups when navigating to an error - (next-error-hook . flycheck-display-error-at-point)) - "Hooks which Flycheck needs to hook in. - -The `car' of each pair is a hook variable, the `cdr' a function -to be added or removed from the hook variable if Flycheck mode is -enabled and disabled respectively.") - -;;;###autoload -(define-minor-mode flycheck-mode - "Flycheck is a minor mode for on-the-fly syntax checking. - -In `flycheck-mode' the buffer is automatically syntax-checked -using the first suitable syntax checker from `flycheck-checkers'. -Use `flycheck-select-checker' to select a checker for the current -buffer manually. - -If you run into issues, use `\\[flycheck-verify-setup]' to get help. - -Flycheck supports many languages out of the box, and many -additional ones are available on MELPA. Adding new ones is very -easy. Complete documentation is available online at URL -`https://www.flycheck.org/en/latest/'. Please report issues and -request features at URL `https://github.com/flycheck/flycheck'. - -Flycheck displays its status in the mode line. In the default -configuration, it looks like this: - -`FlyC' This buffer has not been checked yet. -`FlyC-' Flycheck doesn't have a checker for this buffer. -`FlyC*' Flycheck is running. Expect results soon! -`FlyC:3|2' This buffer contains three warnings and two errors. - Use `\\[flycheck-list-errors]' to see the list. - -You may also see the following icons: -`FlyC!' The checker crashed. -`FlyC.' The last syntax check was manually interrupted. -`FlyC?' The checker did something unexpected, like exiting with 1 - but returning no errors. - -The following keybindings are available in `flycheck-mode': - -\\{flycheck-mode-map} -\(you can change the prefix by customizing -`flycheck-keymap-prefix') - -If called interactively, enable Flycheck mode if ARG is positive, -and disable it if ARG is zero or negative. If called from Lisp, -also enable the mode if ARG is omitted or nil, and toggle it if -ARG is ‘toggle’; disable the mode otherwise." - :init-value nil - :keymap flycheck-mode-map - :lighter flycheck-mode-line - :after-hook (flycheck-buffer-automatically 'mode-enabled 'force-deferred) - (cond - (flycheck-mode - (flycheck-clear) - - (pcase-dolist (`(,hook . ,fn) (reverse flycheck-hooks-alist)) - (add-hook hook fn nil 'local)) - - (setq flycheck-old-next-error-function - (if flycheck-standard-error-navigation - next-error-function - :unset)) - (when flycheck-standard-error-navigation - (setq next-error-function #'flycheck-next-error-function)) - - ;; This hook must be added globally since otherwise we cannot - ;; detect a change from a buffer where Flycheck is enabled to a - ;; buffer where Flycheck is not enabled, and therefore cannot - ;; notice that there has been any change when the user switches - ;; back to the buffer where Flycheck is enabled. - (add-hook 'buffer-list-update-hook #'flycheck-handle-buffer-switch)) - (t - (unless (eq flycheck-old-next-error-function :unset) - (setq next-error-function flycheck-old-next-error-function)) - - (pcase-dolist (`(,hook . ,fn) flycheck-hooks-alist) - (remove-hook hook fn 'local)) - - (flycheck-teardown)))) - - -;;; Syntax checker selection for the current buffer -(defun flycheck-get-checker-for-buffer () - "Find the checker for the current buffer. - -Use the selected checker for the current buffer, if any, -otherwise search for the best checker from `flycheck-checkers'. - -Return checker if there is a checker for the current buffer, or -nil otherwise." - (if flycheck-checker - (when (flycheck-may-use-checker flycheck-checker) - flycheck-checker) - (seq-find #'flycheck-may-use-checker flycheck-checkers))) - -(defun flycheck-get-next-checker-for-buffer (checker) - "Get the checker to run after CHECKER for the current buffer." - (let ((next (seq-find #'flycheck-may-use-next-checker - (flycheck-checker-get checker 'next-checkers)))) - (when next - (if (symbolp next) next (cdr next))))) - -(defun flycheck-select-checker (checker) - "Select CHECKER for the current buffer. - -CHECKER is a syntax checker symbol (see `flycheck-checkers') or -nil. In the former case, use CHECKER for the current buffer, -otherwise deselect the current syntax checker (if any) and use -automatic checker selection via `flycheck-checkers'. - -If called interactively prompt for CHECKER. With prefix arg -deselect the current syntax checker and enable automatic -selection again. - -Set `flycheck-checker' to CHECKER and automatically start a new -syntax check if the syntax checker changed. - -CHECKER will be used, even if it is not contained in -`flycheck-checkers', or if it is disabled via -`flycheck-disabled-checkers'." - (interactive - (if current-prefix-arg - (list nil) - (list (flycheck-read-checker "Select checker: " - (flycheck-get-checker-for-buffer))))) - (when (not (eq checker flycheck-checker)) - (unless (or (not checker) (flycheck-may-use-checker checker)) - (flycheck-verify-checker checker) - (user-error "Can't use syntax checker %S in this buffer" checker)) - (setq flycheck-checker checker) - (when flycheck-mode - (flycheck-buffer)))) - -(defun flycheck--toggle-checker (checker enable) - "Enable or disable CHECKER for the current buffer. - -If ENABLE, re-enable CHECKER by removing it from the buffer-local -value of `flycheck-disabled-checkers'. Otherwise, add the syntax -checker to the buffer-local value of `flycheck-disabled-checkers'." - (cond - (enable - ;; We must use `remq' instead of `delq', because we must _not_ modify the - ;; list. Otherwise we could potentially modify the global default value, - ;; in case the list is the global default. - (when (memq checker flycheck-disabled-checkers) - (setq flycheck-disabled-checkers - (remq checker flycheck-disabled-checkers))) - (when (memq checker flycheck--automatically-disabled-checkers) - (setq flycheck--automatically-disabled-checkers - (remq checker flycheck--automatically-disabled-checkers)))) - (t (unless (memq checker flycheck-disabled-checkers) - (push checker flycheck-disabled-checkers))))) - -(defun flycheck-disable-checker (checker &optional enable) - "Interactively disable CHECKER for the current buffer. - -Prompt for a syntax checker to disable, and add the syntax -checker to the buffer-local value of -`flycheck-disabled-checkers'. - -With non-nil ENABLE or with prefix arg, prompt for a disabled -syntax checker and re-enable it by removing it from the -buffer-local value of `flycheck-disabled-checkers'." - (declare - (interactive-only "Directly set `flycheck-disabled-checkers' instead")) - (interactive - (let* ((enable current-prefix-arg) - (candidates (if enable - (append flycheck-disabled-checkers - flycheck--automatically-disabled-checkers) - flycheck-checkers)) - (prompt (if enable "Enable syntax checker: " - "Disable syntax checker: "))) - (when (and enable (not candidates)) - (user-error "No syntax checkers disabled in this buffer")) - (list (flycheck-read-checker prompt nil nil candidates) enable))) - (unless checker - (user-error "No syntax checker given")) - (flycheck--toggle-checker checker enable) - (flycheck-buffer)) - - -;;; Syntax checks for the current buffer -(defvar-local flycheck-current-syntax-check nil - "The current syntax check in the this buffer.") -(put 'flycheck-current-syntax-check 'permanent-local t) - -(defun flycheck-start-current-syntax-check (checker) - "Start a syntax check in the current buffer with CHECKER. - -Set `flycheck-current-syntax-check' accordingly." - ;; Allocate the current syntax check *before* starting it. This allows for - ;; synchronous checks, which call the status callback immediately in their - ;; start function. - (let* ((check - (flycheck-syntax-check-new - :buffer (current-buffer) - :checker checker - :context nil - :working-directory (flycheck-compute-working-directory checker))) - (callback (flycheck-buffer-status-callback check))) - (setq flycheck-current-syntax-check check) - (flycheck-report-status 'running) - (flycheck-syntax-check-start check callback))) - -(defun flycheck-running-p () - "Determine whether a syntax check is running in the current buffer." - (not (null flycheck-current-syntax-check))) - -(defun flycheck-stop () - "Stop any ongoing syntax check in the current buffer." - (when (flycheck-running-p) - (flycheck-syntax-check-interrupt flycheck-current-syntax-check) - ;; Remove the current syntax check, to reset Flycheck into a non-running - ;; state, and to make `flycheck-report-buffer-checker-status' ignore any - ;; status reports from the current syntax check. - (setq flycheck-current-syntax-check nil) - (flycheck-report-status 'interrupted))) - -(defun flycheck-buffer-status-callback (syntax-check) - "Create a status callback for SYNTAX-CHECK in the current buffer." - (lambda (&rest args) - (apply #'flycheck-report-buffer-checker-status - syntax-check args))) - -(defun flycheck-buffer () - "Start checking syntax in the current buffer. - -Get a syntax checker for the current buffer with -`flycheck-get-checker-for-buffer', and start it." - (interactive) - (flycheck-clean-deferred-check) - (if flycheck-mode - (unless (flycheck-running-p) - ;; Clear error list and mark all overlays for deletion. We do not - ;; delete all overlays immediately to avoid excessive re-displays and - ;; flickering, if the same errors gets highlighted again after the check - ;; completed. - (run-hooks 'flycheck-before-syntax-check-hook) - (flycheck-clear-errors) - (flycheck-mark-all-overlays-for-deletion) - (condition-case err - (let* ((checker (flycheck-get-checker-for-buffer))) - (if checker - (flycheck-start-current-syntax-check checker) - (flycheck-clear) - (flycheck-report-status 'no-checker))) - (error - (flycheck-report-failed-syntax-check) - (signal (car err) (cdr err))))) - (user-error "Flycheck mode disabled"))) - -(defun flycheck-report-buffer-checker-status - (syntax-check status &optional data) - "In BUFFER, report a SYNTAX-CHECK STATUS with DATA. - -SYNTAX-CHECK is the `flycheck-syntax-check' which reported -STATUS. STATUS denotes the status of CHECKER, with an optional -DATA. STATUS may be one of the following symbols: - -`errored' - The syntax checker has errored. DATA is an optional error - message. - - This report finishes the current syntax check. - -`interrupted' - The syntax checker was interrupted. DATA is ignored. - - This report finishes the current syntax check. - -`finished' - The syntax checker has finished with a proper error report - for the current buffer. DATA is the (potentially empty) - list of `flycheck-error' objects reported by the syntax - check. - - This report finishes the current syntax check. - -`suspicious' - The syntax checker encountered a suspicious state, which the - user needs to be informed about. DATA is an optional - message. - -A syntax checker _must_ report a status at least once with any -symbol that finishes the current syntax checker. Otherwise -Flycheck gets stuck with the current syntax check. - -If CHECKER is not the currently used syntax checker in -`flycheck-current-syntax-check', the status report is largely -ignored. Notably, any errors reported by the checker are -discarded." - (let ((buffer (flycheck-syntax-check-buffer syntax-check))) - ;; Ignore the status report if the buffer is gone, or if this syntax check - ;; isn't the current one in buffer (which can happen if this is an old - ;; report of an interrupted syntax check, and a new syntax check was started - ;; since this check was interrupted) - (when (and (buffer-live-p buffer) - (eq syntax-check - (buffer-local-value 'flycheck-current-syntax-check buffer))) - (with-current-buffer buffer - (let ((checker (flycheck-syntax-check-checker syntax-check))) - (pcase status - ((or `errored `interrupted) - (flycheck-report-failed-syntax-check status) - (when (eq status 'errored) - ;; In case of error, show the error message - (message "Error from syntax checker %s: %s" - checker (or data "UNKNOWN!")))) - (`suspicious - (when flycheck-mode - (message "Suspicious state from syntax checker %s: %s" - checker (or data "UNKNOWN!"))) - (flycheck-report-status 'suspicious)) - (`finished - (when flycheck-mode - ;; Only report errors from the checker if Flycheck Mode is - ;; still enabled. - (flycheck-finish-current-syntax-check - data - (flycheck-syntax-check-working-directory syntax-check)))) - (_ - (error "Unknown status %s from syntax checker %s" - status checker)))))))) - -(defun flycheck-finish-current-syntax-check (errors working-dir) - "Finish the current syntax-check in the current buffer with ERRORS. - -ERRORS is a list of `flycheck-error' objects reported by the -current syntax check in `flycheck-current-syntax-check'. - -Report all ERRORS and potentially start any next syntax checkers. - -If the current syntax checker reported excessive errors, it is -disabled via `flycheck-disable-excessive-checker' for subsequent -syntax checks. - -Relative file names in ERRORS will be expanded relative to -WORKING-DIR." - (let* ((syntax-check flycheck-current-syntax-check) - (checker (flycheck-syntax-check-checker syntax-check)) - (errors (flycheck-relevant-errors - (flycheck-fill-and-expand-error-file-names - (flycheck-filter-errors - (flycheck-assert-error-list-p errors) checker) - working-dir)))) - (unless (flycheck-disable-excessive-checker checker errors) - (flycheck-report-current-errors errors)) - (let ((next-checker (flycheck-get-next-checker-for-buffer checker))) - (if next-checker - (flycheck-start-current-syntax-check next-checker) - (setq flycheck-current-syntax-check nil) - (flycheck-report-status 'finished) - ;; Delete overlays only after the very last checker has run, to avoid - ;; flickering on intermediate re-displays - (flycheck-delete-marked-overlays) - (flycheck-error-list-refresh) - (run-hooks 'flycheck-after-syntax-check-hook) - (when (eq (current-buffer) (window-buffer)) - (flycheck-display-error-at-point)) - ;; Immediately try to run any pending deferred syntax check, which - ;; were triggered by intermediate automatic check event, to make sure - ;; that we quickly refine outdated error information - (flycheck-perform-deferred-syntax-check))))) - -(defun flycheck-disable-excessive-checker (checker errors) - "Disable CHECKER if it reported excessive ERRORS. - -If ERRORS has more items than `flycheck-checker-error-threshold', -add CHECKER to `flycheck--automatically-disabled-checkers', and -show a warning. - -Return t when CHECKER was disabled, or nil otherwise." - (when (and flycheck-checker-error-threshold - (> (length errors) flycheck-checker-error-threshold)) - ;; Disable CHECKER for this buffer - ;; (`flycheck--automatically-disabled-checkers' is a local variable). - (lwarn '(flycheck syntax-checker) :warning - (substitute-command-keys - "Syntax checker %s reported too many errors (%s) and is disabled. -Use `\\[customize-variable] RET flycheck-checker-error-threshold' to -change the threshold or `\\[universal-argument] \ -\\[flycheck-disable-checker]' to re-enable the checker.") - checker (length errors)) - (push checker flycheck--automatically-disabled-checkers) - t)) - -(defun flycheck-clear (&optional shall-interrupt) - "Clear all errors in the current buffer. - -With prefix arg or SHALL-INTERRUPT non-nil, also interrupt the -current syntax check." - (interactive "P") - (when shall-interrupt - (flycheck-stop)) - (flycheck-delete-all-overlays) - (flycheck-clear-errors) - (flycheck-error-list-refresh) - (flycheck-hide-error-buffer)) - -(defun flycheck--empty-variables () - "Empty variables used by Flycheck." - (kill-local-variable 'flycheck--file-truename-cache) - (kill-local-variable 'flycheck--idle-trigger-timer) - (kill-local-variable 'flycheck--idle-trigger-conditions) - (kill-local-variable 'flycheck--last-error-display-tick)) - -(defun flycheck-teardown (&optional ignore-global) - "Teardown Flycheck in the current buffer. - -Completely clear the whole Flycheck state. Remove overlays, kill -running checks, and empty all variables used by Flycheck. - -Unless optional argument IGNORE-GLOBAL is non-nil, check to see -if no more Flycheck buffers remain (aside from the current -buffer), and if so then clean up global hooks." - (flycheck-safe-delete-temporaries) - (flycheck-stop) - (flycheck-clean-deferred-check) - (flycheck-clear) - (flycheck-cancel-error-display-error-at-point-timer) - (flycheck--clear-idle-trigger-timer) - (flycheck--empty-variables) - (unless (or ignore-global - (seq-some (lambda (buf) - (and (not (equal buf (current-buffer))) - (buffer-local-value 'flycheck-mode buf))) - (buffer-list))) - (flycheck-global-teardown 'ignore-local))) - - -;;; Automatic syntax checking in a buffer -(defun flycheck-may-check-automatically (&rest conditions) - "Determine whether the buffer may be checked under one of CONDITIONS. - -Read-only buffers may never be checked automatically. - -If CONDITIONS are given, determine whether syntax may be checked -under at least one of them, according to -`flycheck-check-syntax-automatically'." - (and (not (or buffer-read-only (flycheck-ephemeral-buffer-p))) - (file-exists-p default-directory) - (or (not conditions) - (seq-some - (lambda (condition) - (memq condition flycheck-check-syntax-automatically)) - conditions)))) - -(defvar-local flycheck--idle-trigger-timer nil - "Timer used to trigger a syntax check after an idle delay.") - -(defvar-local flycheck--idle-trigger-conditions nil - "List of conditions under which an idle syntax check will be triggered. -This will be some subset of the allowable values for -`flycheck-check-syntax-automatically'. - -For example, if the user switches to a buffer and then makes an -edit, this list will have the values `idle-change' and -`idle-buffer-switch' in it, at least until the idle timer -expires.") - -(defun flycheck-buffer-automatically (&optional condition force-deferred) - "Automatically check syntax at CONDITION. - -Syntax is not checked if `flycheck-may-check-automatically' -returns nil for CONDITION. (CONDITION may be a single condition -or a list of them.) - -The syntax check is deferred if FORCE-DEFERRED is non-nil, or if -`flycheck-must-defer-check' returns t." - (when (and flycheck-mode (if (listp condition) - (apply #'flycheck-may-check-automatically - condition) - (flycheck-may-check-automatically condition))) - (flycheck--clear-idle-trigger-timer) - (setq flycheck--idle-trigger-conditions nil) - (if (or force-deferred (flycheck-must-defer-check)) - (flycheck-buffer-deferred) - (with-demoted-errors "Error while checking syntax automatically: %S" - (flycheck-buffer))))) - -(defun flycheck--clear-idle-trigger-timer () - "Clear the idle trigger timer." - (when flycheck--idle-trigger-timer - (cancel-timer flycheck--idle-trigger-timer) - (setq flycheck--idle-trigger-timer nil))) - -(defun flycheck--handle-idle-trigger (buffer) - "Run a syntax check in BUFFER if appropriate. -This function is called by `flycheck--idle-trigger-timer'." - (let ((current-buffer (current-buffer))) - (when (buffer-live-p buffer) - (with-current-buffer buffer - (unless (or flycheck-buffer-switch-check-intermediate-buffers - (eq buffer current-buffer)) - (setq flycheck--idle-trigger-conditions - (delq 'idle-buffer-switch - flycheck--idle-trigger-conditions))) - (when flycheck--idle-trigger-conditions - (flycheck-buffer-automatically flycheck--idle-trigger-conditions) - (setq flycheck--idle-trigger-conditions nil)))))) - -(defun flycheck-handle-change (beg end _len) - "Handle a buffer change between BEG and END. - -BEG and END mark the beginning and end of the change text. _LEN -is ignored. - -Start a syntax check if a new line has been inserted into the -buffer." - ;; Save and restore the match data, as recommended in (elisp)Change Hooks - (save-match-data - (when flycheck-mode - (if (string-match-p (rx "\n") (buffer-substring beg end)) - (flycheck-buffer-automatically 'new-line 'force-deferred) - (when (memq 'idle-change flycheck-check-syntax-automatically) - (flycheck--clear-idle-trigger-timer) - (cl-pushnew 'idle-change flycheck--idle-trigger-conditions) - (setq flycheck--idle-trigger-timer - (run-at-time flycheck-idle-change-delay nil - #'flycheck--handle-idle-trigger - (current-buffer)))))))) - -(defvar flycheck--last-buffer (current-buffer) - "The current buffer or the buffer that was previously current. -This is usually equal to the current buffer, unless the user just -switched buffers. After a buffer switch, it is the previous -buffer.") - -(defun flycheck-handle-buffer-switch () - "Handle a possible switch to another buffer. - -If a buffer switch actually happened, schedule a syntax check." - ;; Switching buffers here is weird, but unfortunately necessary. It - ;; turns out that `with-temp-buffer' triggers - ;; `buffer-list-update-hook' twice, and the value of - ;; `current-buffer' is bogus in one of those triggers (the one just - ;; after the temp buffer is killed). If we rely on the bogus value, - ;; Flycheck will think that the user is switching back and forth - ;; between different buffers during the `with-temp-buffer' call - ;; (note: two different normal buffers, not the current buffer and - ;; the temp buffer!), and that would trigger spurious syntax checks. - ;; It seems that reading (window-buffer) gets us the correct current - ;; buffer in all important real-life situations (although it doesn't - ;; necessarily catch uses of `set-buffer'). - (with-current-buffer (window-buffer) - (unless (or (equal flycheck--last-buffer (current-buffer)) - ;; Don't bother keeping track of changes to and from - ;; the minibuffer, as they will never require us to - ;; run a syntax check. - (minibufferp)) - (setq flycheck--last-buffer (current-buffer)) - (when (and flycheck-mode - (memq 'idle-buffer-switch flycheck-check-syntax-automatically)) - (flycheck--clear-idle-trigger-timer) - (cl-pushnew 'idle-buffer-switch flycheck--idle-trigger-conditions) - (setq flycheck--idle-trigger-timer - (run-at-time flycheck-idle-buffer-switch-delay nil - #'flycheck--handle-idle-trigger - (current-buffer))))))) - -(defun flycheck-handle-save () - "Handle a save of the buffer." - (flycheck-buffer-automatically 'save)) - - -;;; Deferred syntax checking -(defvar-local flycheck-deferred-syntax-check nil - "If non-nil, a deferred syntax check is pending.") - -(defun flycheck-must-defer-check () - "Determine whether the syntax check has to be deferred. - -A check has to be deferred if the buffer is not visible, or if the buffer is -currently being reverted. - -Return t if the check is to be deferred, or nil otherwise." - (or (not (get-buffer-window)) - ;; We defer the syntax check if Flycheck is already running, to - ;; immediately start a new syntax check after the current one finished, - ;; because the result of the current check will most likely be outdated by - ;; the time it is finished. - (flycheck-running-p) - ;; We must defer checks while a buffer is being reverted, to avoid race - ;; conditions while the buffer contents are being restored. - revert-buffer-in-progress-p)) - -(defun flycheck-deferred-check-p () - "Determine whether the current buffer has a deferred check. - -Return t if so, or nil otherwise." - flycheck-deferred-syntax-check) - -(defun flycheck-buffer-deferred () - "Defer syntax check for the current buffer." - (setq flycheck-deferred-syntax-check t)) - -(defun flycheck-clean-deferred-check () - "Clean a deferred syntax checking state." - (setq flycheck-deferred-syntax-check nil)) - -(defun flycheck-perform-deferred-syntax-check () - "Perform the deferred syntax check." - (when (flycheck-deferred-check-p) - (flycheck-clean-deferred-check) - (flycheck-buffer-automatically))) - - -;;; Syntax checking in all buffers -(defun flycheck-may-enable-mode () - "Determine whether Flycheck mode may be enabled. - -Flycheck mode is not enabled for - -- the minibuffer, -- `fundamental-mode' -- major modes whose `mode-class' property is `special', -- ephemeral buffers (see `flycheck-ephemeral-buffer-p'), -- encrypted buffers (see `flycheck-encrypted-buffer-p'), -- remote files (see `file-remote-p'), -- and major modes excluded by `flycheck-global-modes'. - -Return non-nil if Flycheck mode may be enabled, and nil -otherwise." - (and (pcase flycheck-global-modes - ;; Whether `major-mode' is disallowed by `flycheck-global-modes' - (`t t) - (`(not . ,modes) (not (memq major-mode modes))) - (modes (memq major-mode modes))) - (not (or (minibufferp) - (eq major-mode 'fundamental-mode) - (eq (get major-mode 'mode-class) 'special) - (flycheck-ephemeral-buffer-p) - (flycheck-encrypted-buffer-p) - (and (buffer-file-name) - (file-remote-p (buffer-file-name) 'method)))))) - -(defun flycheck-mode-on-safe () - "Enable command `flycheck-mode' if it is safe to do so. - -Command `flycheck-mode' is only enabled if -`flycheck-may-enable-mode' returns a non-nil result." - (when (flycheck-may-enable-mode) - (flycheck-mode))) - -;;;###autoload -(define-globalized-minor-mode global-flycheck-mode flycheck-mode - flycheck-mode-on-safe - :init-value nil - ;; Do not expose Global Flycheck Mode on customize interface, because the - ;; interaction between package.el and customize is currently broken. See - ;; https://github.com/flycheck/flycheck/issues/595 - - ;; :require 'flycheck :group - ;; 'flycheck - ) - -(defun flycheck-global-teardown (&optional ignore-local) - "Teardown Flycheck in all buffers. - -Completely clear the whole Flycheck state in all buffers, stop -all running checks, remove all temporary files, and empty all -variables of Flycheck. - -Also remove global hooks. (If optional argument IGNORE-LOCAL is -non-nil, then only do this and skip per-buffer teardown.)" - (unless ignore-local - (dolist (buffer (buffer-list)) - (when (buffer-live-p buffer) - (with-current-buffer buffer - (when flycheck-mode - (flycheck-teardown 'ignore-global)))))) - (remove-hook 'buffer-list-update-hook #'flycheck-handle-buffer-switch)) - -;; Clean up the entire state of Flycheck when Emacs is killed, to get rid of any -;; pending temporary files. -(add-hook 'kill-emacs-hook #'flycheck-global-teardown) - - -;;; Errors from syntax checks -(cl-defstruct (flycheck-error - (:constructor nil) - (:constructor - flycheck-error-new - (&key - line column end-line end-column - buffer checker filename message level id group - &aux (-end-line end-line) (-end-column end-column))) - (:constructor - flycheck-error-new-at - (line - column - &optional level message - &key end-line end-column checker id group - (filename (buffer-file-name)) (buffer (current-buffer)) - &aux (-end-line end-line) (-end-column end-column))) - (:constructor - flycheck-error-new-at-pos - (pos - &optional level message - &key end-pos checker id group - (filename (buffer-file-name)) (buffer (current-buffer)) - &aux - ((line . column) - (if pos (flycheck-line-column-at-pos pos) - '(nil . nil))) - ((-end-line . -end-column) - (if end-pos (flycheck-line-column-at-pos end-pos) - '(nil . nil)))))) - "Structure representing an error reported by a syntax checker. -Slots: - -`buffer' - The buffer that the error was reported for, as buffer object. - -`checker' - The syntax checker which reported this error, as symbol. - -`filename' - The file name the error refers to, as string. - -`line' - The line on which the error starts, as number. - -`column' (optional) - The column at which the error starts, as number. - - For compatibility with external tools and unlike Emacs - itself (e.g. in Compile Mode) Flycheck uses _1-based_ - columns: The first character on a line is column 1. - - Occasionally some tools try to proactively adapt to Emacs - and emit 0-based columns automatically. In these cases, the - columns must be adjusted for Flycheck, see - `flycheck-increment-error-columns'. - - If nil, the whole line is highlighted. - -`end-line' (optional) - The line on which the error ends. If nil, this is computed according to - `flycheck-highlighting-mode'. - -`end-column' - The column at which the error ends. If nil, this is computed according to - `flycheck-highlighting-mode'. Error intervals are right-open: the - end-column points to the first character not included in the error. For - example, 1:1 is an empty range. and in \"line-number-at-pos\", the range - 6:12 covers the word \"number\". - -`message' (optional) - The error message as a string, if any. - -`level' - The error level, as either `info', `warning' or `error'. - -`id' (optional) - An ID identifying the kind of error. - -`group' (optional) - A symbol identifying the group the error belongs to. - - Some tools will emit multiple errors that relate to the same - issue (e.g., lifetime errors in Rust). All related errors - collected by a checker should have the same `group` value, - in order to be able to present them to the user. - - See `flycheck-related-errors`." - buffer checker filename line column message level id group - ;; The fields below are at the end of the record to preserve backwards - ;; compatibility; see https://github.com/flycheck/flycheck/pull/1400 and - ;; https://lists.gnu.org/archive/html/emacs-devel/2018-07/msg00436.html - -end-line -end-column) - -;; These accessors are defined for backwards compatibility -;; FIXME: Clean up once package.el learns how to recompile dependencies. - -(defun flycheck-error-end-line (err) - "Return the end line of a Flycheck error ERR." - (condition-case nil (flycheck-error--end-line err) - (args-out-of-range nil))) - -(defun flycheck-error-end-column (err) - "Return the end column of a Flycheck error ERR." - (condition-case nil (flycheck-error--end-column err) - (args-out-of-range nil))) - -(defun flycheck-error--set-end-line (err line) - "Set the end line of a Flycheck error ERR to LINE." - (condition-case nil (setf (flycheck-error--end-line err) line) - (args-out-of-range nil))) - -(defun flycheck-error--set-end-column (err column) - "Set the end column of a Flycheck error ERR to COLUMN." - (condition-case nil (setf (flycheck-error--end-column err) column) - (args-out-of-range nil))) - -(gv-define-simple-setter flycheck-error-end-line - flycheck-error--set-end-line) -(gv-define-simple-setter flycheck-error-end-column - flycheck-error--set-end-column) - -(defmacro flycheck-error-with-buffer (err &rest forms) - "Switch to the buffer of ERR and evaluate FORMS. - -If the buffer of ERR is not live, FORMS are not evaluated." - (declare (indent 1) (debug t)) - `(when (buffer-live-p (flycheck-error-buffer ,err)) - (with-current-buffer (flycheck-error-buffer ,err) - ,@forms))) - -(defun flycheck--exact-region (err) - "Get the region of ERR, if ERR specifies a range. - -Return a cons cell `(BEG . END)'. If the input range is empty, -it is expanded to cover at least one character so that END is -always greater than BEG. If ERR doesn't specify an end-column -return nil." - (-if-let* ((line (flycheck-error-line err)) - (column (flycheck-error-column err)) - (end-line (or (flycheck-error-end-line err) line)) - (end-column (flycheck-error-end-column err))) - ;; Ignoring fields speeds up calls to `line-end-position'. - (let* ((inhibit-field-text-motion t) - (beg (flycheck-line-column-to-position line column)) - (end (flycheck-line-column-to-position end-line end-column))) - (cond - ((< beg end) (cons beg end)) - ((= end (point-max)) (cons (1- end) end)) - (t (cons end (1+ end))))))) - -(defun flycheck--line-region (pos) - "Get the line region of position POS. - -Return a cons cell `(BEG . END)' where BEG is the first -non-whitespace character on the line ERR refers to, and END the -end of the line." - (save-excursion - (goto-char pos) - (forward-line 0) - (let ((bol (point)) - (end (line-end-position))) - ;; Move to the beginning of this line's indentation, similar to - ;; `back-to-indentation' - (skip-syntax-forward " " end) - (backward-prefix-chars) - ;; If the current line is blank, highlight it in full; if it's - ;; empty, include the previous line break character(s) to have - ;; any region at all (when called with 0, `line-end-position' - ;; gives us the end of the previous line). - (cons (if (eolp) (if (= bol end) (line-end-position 0) bol) (point)) - end)))) - -(defun flycheck--column-region (pos) - "Get the column region of position POS. - -Return a cons cell `(BEG . END)' where BEG is the character -before the column, and END the actual column." - (save-excursion - (goto-char pos) - ;; (eobp): No enough lines in the buffer - (if (eobp) (cons (1- (point-max)) (point-max)) - (cons pos (1+ pos))))) - -(defun flycheck-bounds-of-thing-at-point (thing pos) - "Get the region of THING at position POS. - -THING is a understood by `thing-at-point'. - -Return a cons cell `(BEG . END)' where BEG is the beginning of -the THING at the column, and END the end of the THING." - (save-excursion - (goto-char pos) - (bounds-of-thing-at-point thing))) - -(defun flycheck--approximate-region (err mode) - "Compute the region of ERR based on MODE and ERR's line and column." - ;; Ignoring fields speeds up calls to `line-end-position'. - (let* ((inhibit-field-text-motion t) - (line (flycheck-error-line err)) - (column (flycheck-error-column err)) - (beg (flycheck-line-column-to-position line (or column 1)))) - (if (or (null column) - (eq mode 'lines)) - (flycheck--line-region beg) - (or (pcase mode - (`symbols - ;; Ensure that we're on a word or symbol. See - ;; https://github.com/flycheck/flycheck/issues/1519 - (and (< beg (point-max)) - (memq (char-syntax (char-after beg)) '(?w ?_)) - (flycheck-bounds-of-thing-at-point 'symbol beg))) - (`sexps - (flycheck-bounds-of-thing-at-point 'sexp beg))) - (flycheck--column-region beg))))) - -(defun flycheck-error-region-for-mode (err mode) - "Get the region of ERR for the highlighting MODE. - -ERR is a Flycheck error. If its position is fully specified, use -that to compute a region; otherwise, use MODE, as documented in -`flycheck-highlighting-mode'. If MODE is nil, signal an error." - (flycheck-error-with-buffer err - (save-restriction - (widen) - (or (flycheck--exact-region err) - (flycheck--approximate-region err mode))))) - -(defun flycheck-error-pos (err) - "Get the buffer position of ERR. - -ERR is a Flycheck error whose position to get. - -The error position is the error column, or the first -non-whitespace character of the error line, if ERR has no error column." - (car (flycheck-error-region-for-mode - err flycheck-highlighting-mode))) - -(defun flycheck-error-format-snippet (err &optional max-length) - "Extract the text that ERR refers to from the buffer. - -Newlines and blanks are replaced by single spaces. If ERR -doesn't include an end-position, return nil. - -MAX-LENGTH is how many characters to read from the buffer, at -most. It defaults to 20." - (flycheck-error-with-buffer err - (save-restriction - (widen) - (pcase (flycheck--exact-region err) - (`(,beg . ,end) - (truncate-string-to-width - (replace-regexp-in-string - "\\s-+" " " (buffer-substring beg (min end (point-max)))) - (or max-length 20) nil nil t)))))) - -(defun flycheck-error-format-message-and-id (err &optional include-snippet) - "Format the message and id of ERR as human-readable string. - -If INCLUDE-SNIPPET is non-nil, prepend the message with a snippet -of the text that the error applies to (such text can only be -determined if the error contains a full span, not just a -beginning position)." - (let* ((id (flycheck-error-id err)) - (fname (flycheck-error-filename err)) - (other-file-p (and fname (not (equal fname (buffer-file-name)))))) - (concat (and other-file-p (format "In %S:\n" (file-relative-name fname))) - (and include-snippet - (-when-let* ((snippet (flycheck-error-format-snippet err))) - (flycheck--format-message "`%s': " snippet))) - (or (flycheck-error-message err) - (format "Unknown %S" (flycheck-error-level err))) - (and id (format " [%s]" id))))) - -(defun flycheck-error-format-position (err) - "Format the position of ERR as a human-readable string." - (let ((line (flycheck-error-line err)) - (column (flycheck-error-column err)) - (end-line (flycheck-error-end-line err)) - (end-column (flycheck-error-end-column err))) - (if (and line column) - (if (or (null end-line) (equal line end-line)) - (if (or (null end-column) (equal column (1- end-column))) - (format "%d:%d" line column) - (format "%d:%d-%d" line column end-column)) - (format "(%d:%d)-(%d:%d)" line column end-line end-column)) - (if (or (null end-line) (equal line end-line)) - (format "%d" line) - (format "%d-%d" line end-line))))) - -(defun flycheck-error-format (err &optional with-file-name) - "Format ERR as human-readable string, optionally WITH-FILE-NAME. - -Return a string that represents the given ERR. If WITH-FILE-NAME -is given and non-nil, include the file-name as well, otherwise -omit it." - (let* ((level (symbol-name (flycheck-error-level err))) - (checker (symbol-name (flycheck-error-checker err))) - (format `(,@(when with-file-name - (list (flycheck-error-filename err) ":")) - ,(flycheck-error-format-position err) ":" - ,level ": " - ,(flycheck-error-format-message-and-id err) - " (" ,checker ")"))) - (apply #'concat format))) - -(defun flycheck-error-< (err1 err2) - "Determine whether ERR1 is less than ERR2 by location." - (let ((l1 (flycheck-error-line err1)) - (l2 (flycheck-error-line err2))) - (if (/= l1 l2) - (< l1 l2) - (let ((c1 (or (flycheck-error-column err1) 1)) - (c2 (or (flycheck-error-column err2) 1))) - (if (/= c1 c2) - (< c1 c2) - (let ((el1 (or (flycheck-error-end-line err1) l1)) - (el2 (or (flycheck-error-end-line err2) l2))) - (if (/= el1 el2) - (< el1 el2) - (let ((cl1 (or (flycheck-error-end-column err1) 1)) - (cl2 (or (flycheck-error-end-column err2) 1))) - (< cl1 cl2))))))))) - -(defun flycheck-error-level-< (err1 err2) - "Determine whether ERR1 is less than ERR2 by error level. - -Like `flycheck-error-<', but compares by error level severity -first. Levels of the same severity are compared by name." - (let* ((level1 (flycheck-error-level err1)) - (level2 (flycheck-error-level err2)) - (severity1 (flycheck-error-level-severity level1)) - (severity2 (flycheck-error-level-severity level2))) - (cond - ((= severity1 severity2) - (if (string= level1 level2) - (flycheck-error-< err1 err2) - (string< level1 level2))) - (t (< severity1 severity2))))) - -(defun flycheck-assert-error-list-p (errors) - "Assert that all items in ERRORS are of `flycheck-error' type. - -Signal an error if any item in ERRORS is not a `flycheck-error' -object, as by `flycheck-error-p'. Otherwise return ERRORS -again." - (unless (listp errors) - (signal 'wrong-type-argument (list 'listp errors))) - (dolist (err errors) - (unless (flycheck-error-p err) - (signal 'wrong-type-argument (list 'flycheck-error-p err)))) - errors) - - -;;; Errors in the current buffer -(defvar-local flycheck-current-errors nil - "A list of all errors and warnings in the current buffer.") - -(defun flycheck-report-current-errors (errors) - "Report ERRORS in the current buffer. - -Add ERRORS to `flycheck-current-errors' and process each error -with `flycheck-process-error-functions'." - (setq flycheck-current-errors (append errors flycheck-current-errors)) - (overlay-recenter (point-max)) - ;; We can't use `seq-sort-by' because it's not in Emacs 25's built-in `seq', - ;; and installing an updated version doesn't help (this is a package.el bug; - ;; see https://lists.gnu.org/archive/html/emacs-devel/2020-04/msg01974.html). - (seq-do (lambda (err) - (run-hook-with-args-until-success 'flycheck-process-error-functions - err)) - (seq-sort (lambda (e1 e2) - (< (flycheck-error-line e1) (flycheck-error-line e2))) - errors))) - -(defun flycheck-clear-errors () - "Remove all error information from the current buffer." - (setq flycheck-current-errors nil) - (flycheck-report-status 'not-checked)) - -(defun flycheck-fill-and-expand-error-file-names (errors directory) - "Fill and expand file names in ERRORS relative to DIRECTORY. - -Expand all file names of ERRORS against DIRECTORY. If the file -name of an error is nil fill in the result of function -`buffer-file-name' in the current buffer. - -Return ERRORS, modified in-place." - (seq-do (lambda (err) - (setf (flycheck-error-filename err) - (-if-let (filename (flycheck-error-filename err)) - (expand-file-name filename directory) - (buffer-file-name)))) - errors) - errors) - -(defun flycheck-relevant-error-other-file-p (err) - "Determine whether ERR is a relevant error for another file." - (let ((file-name (flycheck-error-filename err))) - (and file-name - flycheck-relevant-error-other-file-show - (or (null buffer-file-name) - (not (flycheck-same-files-p buffer-file-name file-name))) - (<= (flycheck-error-level-severity - flycheck-relevant-error-other-file-minimum-level) - (flycheck-error-level-severity (flycheck-error-level err)))))) - -(defun flycheck-relevant-error-p (err) - "Determine whether ERR is relevant for the current buffer. - -Return t if ERR may be shown for the current buffer, or nil -otherwise." - (flycheck-error-with-buffer err - (let ((file-name (flycheck-error-filename err)) - (message (flycheck-error-message err))) - (and - (or - ;; Neither the error nor buffer have a file name - (and (not file-name) (not buffer-file-name)) - ;; Both have files, and they match - (and buffer-file-name file-name - (flycheck-same-files-p file-name buffer-file-name)) - ;; This is a significant error from another file - (flycheck-relevant-error-other-file-p err)) - message - (not (string-empty-p message)) - ;; Errors without line numbers are discarded. If a linter - ;; reports relevant errors without line numbers, use - ;; `flycheck-fill-empty-line-numbers' as the checker's - ;; `:error-filter' to set them to line 0. - (flycheck-error-line err))))) - -(defun flycheck-relevant-errors (errors) - "Filter the relevant errors from ERRORS. - -Return a list of all errors that are relevant for their -corresponding buffer." - (seq-filter #'flycheck-relevant-error-p errors)) - -(defun flycheck-related-errors (err &optional error-set) - "Get all the errors that are in the same group as ERR. - -Return a list of all errors (from ERROR-SET) that have the same -`flycheck-error-group' as ERR, including ERR itself. - -If ERROR-SET is nil, `flycheck-current-errors' is used instead." - (let ((group (flycheck-error-group err)) - (checker (flycheck-error-checker err))) - (if group - (seq-filter (lambda (e) - (and (eq (flycheck-error-checker e) checker) - (eq (flycheck-error-group e) group))) - (or error-set flycheck-current-errors)) - (list err)))) - - -;;; Status reporting for the current buffer -(defvar-local flycheck-last-status-change 'not-checked - "The last status change in the current buffer.") - -(defun flycheck-report-failed-syntax-check (&optional status) - "Report a failed Flycheck syntax check with STATUS. - -STATUS is a status symbol for `flycheck-report-status', -defaulting to `errored'. - -Clear Flycheck state, run `flycheck-syntax-check-failed-hook' and -report an error STATUS." - (flycheck-clear) - (setq flycheck-current-syntax-check nil) - (run-hooks 'flycheck-syntax-check-failed-hook) - (flycheck-report-status (or status 'errored))) - -(defun flycheck-report-status (status) - "Report Flycheck STATUS. - -STATUS is one of the following symbols: - -`not-checked' - The current buffer was not checked. - -`no-checker' - Automatic syntax checker selection did not find a suitable - syntax checker. - -`running' - A syntax check is now running in the current buffer. - -`errored' - The current syntax check has errored. - -`finished' - The current syntax check was finished normally. - -`interrupted' - The current syntax check was interrupted. - -`suspicious' - The last syntax check had a suspicious result. - -Set `flycheck-last-status-change' and call -`flycheck-status-changed-functions' with STATUS. Afterwards -refresh the mode line." - (setq flycheck-last-status-change status) - (run-hook-with-args 'flycheck-status-changed-functions status) - (force-mode-line-update)) - -(defun flycheck-mode-line-status-text (&optional status) - "Get a text describing STATUS for use in the mode line. - -STATUS defaults to `flycheck-last-status-change' if omitted or -nil." - (let ((text (pcase (or status flycheck-last-status-change) - (`not-checked "") - (`no-checker "-") - (`running "*") - (`errored "!") - (`finished - (let-alist (flycheck-count-errors flycheck-current-errors) - (if (or .error .warning) - (format ":%s|%s" (or .error 0) (or .warning 0)) - ""))) - (`interrupted ".") - (`suspicious "?")))) - (concat " " flycheck-mode-line-prefix text))) - - -;;; Error levels -(defun flycheck-make-margin-spec (margin-str face) - "Make a display spec to indicate errors in the margins. - -Returns MARGIN-STR with FACE applied." - (propertize margin-str 'face `(,face default))) - -(defconst flycheck-default-margin-str "»" - "String used to indicate errors in the margins.") - -(defconst flycheck-default-margin-continuation-str "⋮" - "String used to indicate continuation lines in the margins.") - -;;;###autoload -(defun flycheck-define-error-level (level &rest properties) - "Define a new error LEVEL with PROPERTIES. - -The following PROPERTIES constitute an error level: - -`:severity SEVERITY' - A number denoting the severity of this level. The higher - the number, the more severe is this level compared to other - levels. Defaults to 0; info is -10, warning is 10, and - error is 100. - - The severity is used by `flycheck-error-level-<' to - determine the ordering of errors according to their levels. - -`:compilation-level LEVEL' - - A number indicating the broad class of messages that errors - at this level belong to: one of 0 (info), 1 (warning), or - 2 or nil (error). Defaults to nil. - - This is used by `flycheck-checker-pattern-to-error-regexp' - to map error levels into `compilation-mode''s hierarchy and - to get proper highlighting of errors in `compilation-mode'. - -`:overlay-category CATEGORY' - A symbol denoting the overlay category to use for error - highlight overlays for this level. See Info - node `(elisp)Overlay Properties' for more information about - overlay categories. - - A category for an error level overlay should at least define - the `face' property, for error highlighting. Another useful - property for error level categories is `priority', to - influence the stacking of multiple error level overlays. - -`:fringe-bitmap BITMAPS' - A fringe bitmap symbol denoting the bitmap to use for fringe - indicators for this level, or a cons of two bitmaps (one for - narrow fringes and one for wide fringes). See Info node - `(elisp)Fringe Bitmaps' for more information about fringe - bitmaps, including a list of built-in fringe bitmaps. - -`:fringe-face FACE' - A face symbol denoting the face to use for fringe indicators - for this level. - -`:margin-spec SPEC' - A display specification indicating what to display in the - margin when `flycheck-indication-mode' is `left-margin' or - `right-margin'. See Info node `(elisp)Displaying in the - Margins'. If omitted, Flycheck generates an image spec from - the fringe bitmap. - -`:error-list-face FACE' - A face symbol denoting the face to use for messages of this - level in the error list. See `flycheck-list-errors'." - (declare (indent 1)) - (setf (get level 'flycheck-error-level) t) - (setf (get level 'flycheck-error-severity) - (or (plist-get properties :severity) 0)) - (setf (get level 'flycheck-compilation-level) - (plist-get properties :compilation-level)) - (setf (get level 'flycheck-overlay-category) - (plist-get properties :overlay-category)) - (setf (get level 'flycheck-fringe-bitmaps) - (let ((bitmap (plist-get properties :fringe-bitmap))) - (if (consp bitmap) bitmap (cons bitmap bitmap)))) - ;; Kept for compatibility - (setf (get level 'flycheck-fringe-bitmap-double-arrow) - (car (get level 'flycheck-fringe-bitmaps))) - (setf (get level 'flycheck-fringe-face) - (plist-get properties :fringe-face)) - (setf (get level 'flycheck-margin-spec) - (or (plist-get properties :margin-spec) - (flycheck-make-margin-spec - flycheck-default-margin-str - (or (get level 'flycheck-fringe-face) 'default)))) - (setf (get level 'flycheck-margin-continuation) - (flycheck-make-margin-spec - flycheck-default-margin-continuation-str - (or (get level 'flycheck-fringe-face) 'default))) - (setf (get level 'flycheck-error-list-face) - (plist-get properties :error-list-face))) - -(defun flycheck-error-level-p (level) - "Determine whether LEVEL is a Flycheck error level." - (get level 'flycheck-error-level)) - -(defun flycheck-error-level-severity (level) - "Get the numeric severity of LEVEL." - (or (get level 'flycheck-error-severity) 0)) - -(defun flycheck-error-level-compilation-level (level) - "Get the compilation level for LEVEL." - (get level 'flycheck-compilation-level)) - -(defun flycheck-error-level-overlay-category (level) - "Get the overlay category for LEVEL." - (get level 'flycheck-overlay-category)) - -(defun flycheck-error-level-margin-spec (level) - "Get the margin spec for LEVEL." - (get level 'flycheck-margin-spec)) - -(defun flycheck-error-level-margin-continuation-spec (level) - "Get the margin continuation spec for LEVEL." - (get level 'flycheck-margin-continuation)) - -(defun flycheck-error-level-fringe-bitmap (level &optional hi-res) - "Get the fringe bitmap for LEVEL. - -Optional argument HI-RES non-nil means that the returned bitmap -will be the high resolution version." - (let ((bitmaps (get level 'flycheck-fringe-bitmaps))) - (if hi-res (cdr bitmaps) (car bitmaps)))) - -(defun flycheck-error-level-fringe-face (level) - "Get the fringe face for LEVEL." - (get level 'flycheck-fringe-face)) - -(defun flycheck-error-level-error-list-face (level) - "Get the error list face for LEVEL." - (get level 'flycheck-error-list-face)) - -(defun flycheck-error-level-make-indicator (level side &optional continuation) - "Create the fringe or margin icon for LEVEL at SIDE. - -Return a propertized string that shows an indicator according -to LEVEL and the given fringe or margin SIDE. - -LEVEL is a Flycheck error level defined with -`flycheck-define-error-level', and SIDE is either `left-fringe', -`right-fringe', `left-margin', or `right-margin'. - -CONTINUATION indicates which fringe bitmap or margin spec to use: -either the `:fringe-bitmap' and `:margin-spec' properties of -LEVEL when CONTINUATION is nil or omitted, or bitmaps and specs -indicating an error spanning more than one line. - -Return a propertized string representing the fringe icon, -intended for use as `before-string' of an overlay to actually -show the indicator." - (propertize - "!" 'display - (pcase side - ((or `left-fringe `right-fringe) - (list side - (if continuation 'flycheck-fringe-bitmap-continuation - (let* ((fringe-width - (pcase side - (`left-fringe (car (window-fringes))) - (`right-fringe (cadr (window-fringes))))) - (high-res (>= fringe-width 16))) - (flycheck-error-level-fringe-bitmap level high-res))) - (flycheck-error-level-fringe-face level))) - ((or `left-margin `right-margin) - `((margin ,side) - ,(or (if continuation - (flycheck-error-level-margin-continuation-spec level) - (flycheck-error-level-margin-spec level)) - ""))) - (_ (error "Invalid fringe side: %S" side))))) - -(define-obsolete-function-alias - 'flycheck-error-level-make-fringe-icon - 'flycheck-error-level-make-indicator - "33") - - -;;; Built-in error levels -(defconst flycheck-fringe-bitmap-double-arrow - [#b11011000 - #b01101100 - #b00110110 - #b00011011 - #b00110110 - #b01101100 - #b11011000] - "Bitmaps used to indicate errors in the fringes.") - -(defconst flycheck-fringe-bitmap-double-arrow-hi-res - [#b1111001111000000 - #b0111100111100000 - #b0011110011110000 - #b0001111001111000 - #b0000111100111100 - #b0000011110011110 - #b0000011110011110 - #b0000111100111100 - #b0001111001111000 - #b0011110011110000 - #b0111100111100000 - #b1111001111000000] - "High-resolution bitmap used to indicate errors in the fringes.") - -(defconst flycheck-fringe-bitmap-continuation - [#b1000000010000000 - #b0010000000100000 - #b0000100000001000 - #b0000001000000010] - "Bitmap used to indicate continuation lines in the fringes.") - -(when (fboundp 'define-fringe-bitmap) ;; #ifdef HAVE_WINDOW_SYSTEM - (define-fringe-bitmap - 'flycheck-fringe-bitmap-double-arrow - flycheck-fringe-bitmap-double-arrow) - (define-fringe-bitmap - 'flycheck-fringe-bitmap-double-arrow-hi-res - flycheck-fringe-bitmap-double-arrow-hi-res - nil 16) - (define-fringe-bitmap - 'flycheck-fringe-bitmap-continuation - flycheck-fringe-bitmap-continuation - nil 16 '(top repeat))) - -(defun flycheck-redefine-standard-error-levels - (&optional margin-str fringe-bitmap) - "Redefine Flycheck's standard error levels. - -This is useful to change the character drawn in the -margins (MARGIN-STR, a string) or the bitmap drawn in the -fringes (FRINGE-BITMAP, a fringe bitmap symbol or a cons of such -symbols, as in `flycheck-define-error-level')." - (unless margin-str - (setq margin-str flycheck-default-margin-str)) - - (unless fringe-bitmap - (setq fringe-bitmap - (cons 'flycheck-fringe-bitmap-double-arrow - 'flycheck-fringe-bitmap-double-arrow-hi-res))) - - (setf (get 'flycheck-error-overlay 'face) 'flycheck-error) - (setf (get 'flycheck-error-overlay 'priority) 110) - - (flycheck-define-error-level 'error - :severity 100 - :compilation-level 2 - :overlay-category 'flycheck-error-overlay - :margin-spec (flycheck-make-margin-spec margin-str 'flycheck-fringe-error) - :fringe-bitmap fringe-bitmap - :fringe-face 'flycheck-fringe-error - :error-list-face 'flycheck-error-list-error) - - (setf (get 'flycheck-warning-overlay 'face) 'flycheck-warning) - (setf (get 'flycheck-warning-overlay 'priority) 100) - - (flycheck-define-error-level 'warning - :severity 10 - :compilation-level 1 - :overlay-category 'flycheck-warning-overlay - :margin-spec (flycheck-make-margin-spec margin-str 'flycheck-fringe-warning) - :fringe-bitmap fringe-bitmap - :fringe-face 'flycheck-fringe-warning - :error-list-face 'flycheck-error-list-warning) - - (setf (get 'flycheck-info-overlay 'face) 'flycheck-info) - (setf (get 'flycheck-info-overlay 'priority) 90) - - (flycheck-define-error-level 'info - :severity -10 - :compilation-level 0 - :overlay-category 'flycheck-info-overlay - :margin-spec (flycheck-make-margin-spec margin-str 'flycheck-fringe-info) - :fringe-bitmap fringe-bitmap - :fringe-face 'flycheck-fringe-info - :error-list-face 'flycheck-error-list-info)) - -(flycheck-redefine-standard-error-levels) - - -;;; Error filtering -(defun flycheck-filter-errors (errors checker) - "Filter ERRORS from CHECKER. - -Apply the error filter of CHECKER to ERRORs and return the -result. If CHECKER has no error filter, fall back to -`flycheck-sanitize-errors'." - (let ((filter (or (flycheck-checker-get checker 'error-filter) - #'flycheck-sanitize-errors))) - (funcall filter errors))) - -(defun flycheck-sanitize-errors (errors) - "Sanitize ERRORS. - -Sanitize ERRORS by trimming leading and trailing whitespace in -all error messages, and by replacing 0 columns and empty error -messages with nil. - -Returns sanitized ERRORS." - (dolist (err errors) - (flycheck-error-with-buffer err - (let ((message (flycheck-error-message err)) - (id (flycheck-error-id err))) - (when message - (setq message (string-trim message)) - (setf (flycheck-error-message err) - (if (string-empty-p message) nil message))) - (when (and id (string-empty-p id)) - (setf (flycheck-error-id err) nil)) - (when (eq (flycheck-error-column err) 0) - (setf (flycheck-error-column err) nil)) - (when (eq (flycheck-error-end-column err) 0) - (setf (flycheck-error-end-column err) nil))))) - errors) - -(defun flycheck-remove-error-file-names (file-name errors) - "Remove matching FILE-NAME from ERRORS. - -Use as `:error-filter' for syntax checkers that output faulty -filenames. Flycheck will later fill in the buffer file name. - -Return ERRORS." - (seq-do (lambda (err) - (when (and (flycheck-error-filename err) - (string= (flycheck-error-filename err) file-name)) - (setf (flycheck-error-filename err) nil))) - errors) - errors) - -(defun flycheck-increment-error-columns (errors &optional offset) - "Increment all columns of ERRORS by OFFSET (default: 1). - - Use this as `:error-filter' if a syntax checker outputs 0-based - columns." - (setq offset (or offset 1)) ;; Emacs bug #31715 - (seq-do (lambda (err) - (when (flycheck-error-column err) - (cl-incf (flycheck-error-column err) offset)) - (when (flycheck-error-end-column err) - (cl-incf (flycheck-error-end-column err) offset))) - errors) - errors) - -(defun flycheck-collapse-error-message-whitespace (errors) - "Collapse whitespace in all messages of ERRORS. - -Return ERRORS." - (dolist (err errors) - (-when-let (message (flycheck-error-message err)) - (setf (flycheck-error-message err) - (replace-regexp-in-string (rx (one-or-more (any space "\n" "\r"))) - " " message 'fixed-case 'literal)))) - errors) - -(defun flycheck-dedent-error-messages (errors) - "Dedent all messages of ERRORS. - -For each error in ERRORS, determine the indentation offset from -the leading whitespace of the first line, and dedent all further -lines accordingly. - -Return ERRORS, with in-place modifications." - (dolist (err errors) - (-when-let (message (flycheck-error-message err)) - (with-temp-buffer - (insert message) - ;; Determine the indentation offset - (goto-char (point-min)) - (back-to-indentation) - (let* ((indent-offset (- (point) (point-min)))) - ;; Now iterate over all lines and dedent each according to - ;; `indent-offset' - (while (not (eobp)) - (back-to-indentation) - ;; If the current line starts with sufficient whitespace, delete the - ;; indentation offset. Otherwise keep the line intact, as we might - ;; loose valuable information - (when (>= (- (point) (line-beginning-position)) indent-offset) - (delete-char (- indent-offset))) - (forward-line 1))) - (delete-trailing-whitespace (point-min) (point-max)) - (setf (flycheck-error-message err) - (buffer-substring-no-properties (point-min) (point-max)))))) - errors) - -(defun flycheck-fold-include-levels (errors sentinel-message) - "Fold levels of ERRORS from included files. - -ERRORS is a list of `flycheck-error' objects. SENTINEL-MESSAGE -is a regular expression matched against the error message to -determine whether the error denotes errors from an included -file. Alternatively, it is a function that is given an error and -shall return non-nil, if the error denotes errors from an -included file." - (unless (or (stringp sentinel-message) (functionp sentinel-message)) - (error "Sentinel must be string or function: %S" sentinel-message)) - (let ((sentinel (if (functionp sentinel-message) - sentinel-message - (lambda (err) - (string-match-p sentinel-message - (flycheck-error-message err))))) - (remaining-errors errors)) - (while remaining-errors - (let* ((current-error (pop remaining-errors))) - (when (funcall sentinel current-error) - ;; We found an error denoting errors in the included file: - ;; 1. process all subsequent errors until faulty include file is found - ;; 2. process again all subsequent errors until an error has the - ;; current file name again - ;; 3. find the most severe error level - (let ((current-filename (flycheck-error-filename current-error)) - (current-level nil) - (faulty-include-filename nil) - (filename nil) - (done (null remaining-errors))) - - (while (not done) - (setq filename (flycheck-error-filename (car remaining-errors))) - (unless faulty-include-filename - (unless (string= filename current-filename) - (setq faulty-include-filename filename))) - - (let* ((error-in-include (pop remaining-errors)) - (in-include-level (flycheck-error-level error-in-include))) - (unless (funcall sentinel error-in-include) - ;; Ignore nested "included file" errors, we are only - ;; interested in real errors because these define our level - (when (or (not current-level) - (> (flycheck-error-level-severity in-include-level) - (flycheck-error-level-severity current-level))) - (setq current-level in-include-level)))) - - (setq done (or (null remaining-errors) - (and faulty-include-filename - (string= filename current-filename))))) - - (setf (flycheck-error-level current-error) current-level - (flycheck-error-message current-error) - (format "In include %s" faulty-include-filename)))))) - errors)) - -(defun flycheck-dequalify-error-ids (errors) - "De-qualify error ids in ERRORS. - -Remove all qualifications from error ids in ERRORS, by stripping -all leading dotted components from error IDs. For instance, if -the error ID is com.foo.E100, replace it with E100. - -This error filter is mainly useful to simplify error IDs obtained -from parsing Checkstyle XML, which frequently has very verbose -IDs, that include the name of the tool." - (seq-do (lambda (err) - (let ((id (flycheck-error-id err))) - (when id - (setf (flycheck-error-id err) - (replace-regexp-in-string - (rx string-start - (group - (optional (zero-or-more not-newline) ".")) - (one-or-more (not (any "."))) - string-end) - "" id 'fixedcase 'literal 1))))) - errors) - errors) - -(defun flycheck-remove-error-ids (errors) - "Remove all error ids from ERRORS." - (seq-do (lambda (err) (setf (flycheck-error-id err) nil)) errors) - errors) - -(defun flycheck-fill-empty-line-numbers (errors) - "Set ERRORS without lines to line 0. - -Use as `:error-filter' for syntax checkers that output errors -without line numbers. - -Return ERRORS." - (seq-do (lambda (err) - (unless (flycheck-error-line err) - (setf (flycheck-error-line err) 0))) - errors) - errors) - - -;;; Error analysis -(defun flycheck-count-errors (errors) - "Count the number of ERRORS, grouped by level. - -Return an alist, where each ITEM is a cons cell whose `car' is an -error level, and whose `cdr' is the number of errors of that -level." - (let (counts-by-level) - (dolist (err errors) - (let* ((level (flycheck-error-level err)) - (item (assq level counts-by-level))) - (if item - (cl-incf (cdr item)) - (push (cons level 1) counts-by-level)))) - counts-by-level)) - -(defun flycheck-has-max-errors-p (errors level) - "Check if there is no error in ERRORS more severe than LEVEL." - (let ((severity (flycheck-error-level-severity level))) - (seq-every-p (lambda (e) (<= (flycheck-error-level-severity - (flycheck-error-level e)) - severity)) - errors))) - -(defun flycheck-has-max-current-errors-p (level) - "Check if there is no current error more severe than LEVEL." - (flycheck-has-max-errors-p flycheck-current-errors level)) - -(defun flycheck-has-errors-p (errors level) - "Determine if there are any ERRORS with LEVEL." - (seq-some (lambda (e) (eq (flycheck-error-level e) level)) errors)) - -(defun flycheck-has-current-errors-p (&optional level) - "Determine if the current buffer has errors with LEVEL. - -If LEVEL is omitted if the current buffer has any errors at all." - (if level - (flycheck-has-errors-p flycheck-current-errors level) - (and flycheck-current-errors t))) - - -;;; Error overlays in the current buffer -(defvar-local flycheck--last-overlay-index 0 - "Last index given to a Flycheck overlay. - -These indices are used to preserve error order (Emacs doesn't -preserve overlay order when calling `overlays-at').") - -(defun flycheck--next-overlay-index () - "Compute the index to assign to a new Flycheck overlay." - (cl-incf flycheck--last-overlay-index)) - -(defun flycheck--highlighting-style (err) - "Determine the highlighting style to apply to ERR. - -Styles are documented in `flycheck-highlighting-style'; this -functions resolves `conditional' style specifications." - (let* ((style flycheck-highlighting-style) - (first-line (flycheck-error-line err)) - (end-line (or (flycheck-error-end-line err) first-line)) - (nlines (- end-line first-line))) - (while (eq (car-safe style) 'conditional) - (pcase-let ((`(,threshold ,s1 ,s2) (cdr style))) - (setq style (if (< nlines threshold) s1 s2)))) - (pcase style - (`(delimiters ,before ,after) - (when (characterp before) - (setq before (flycheck--make-highlighting-delimiter before))) - (when (characterp after) - (setq after (flycheck--make-highlighting-delimiter after))) - (setq style `(delimiters ,before ,after)))) - style)) - -(defun flycheck--setup-highlighting (err overlay) - "Apply properties to OVERLAY to highlight ERR." - (let ((level (flycheck-error-level err))) - (unless flycheck-highlighting-mode - ;; Erase the highlighting from the overlay if requested by the user - (setf (overlay-get overlay 'face) nil)) - (when flycheck-indication-mode - (setf (overlay-get overlay 'before-string) - (flycheck-error-level-make-indicator - level flycheck-indication-mode)) - (setf (overlay-get overlay 'line-prefix) - (flycheck-error-level-make-indicator - level flycheck-indication-mode t))) - (pcase (flycheck--highlighting-style err) - ((or `nil (guard (null flycheck-highlighting-mode))) - ;; Erase the highlighting - (setf (overlay-get overlay 'face) nil)) - (`level-face) - (`(delimiters ,before ,after) - ;; Replace the highlighting with delimiters - (let* ((fringe-face (flycheck-error-level-fringe-face level)) - (delim-face `(flycheck-error-delimiter ,fringe-face))) - (setf (overlay-get overlay 'face) 'flycheck-delimited-error) - (setf (overlay-get overlay 'before-string) - (concat (propertize before 'face delim-face) - (or (overlay-get overlay 'before-string) ""))) - (setf (overlay-get overlay 'after-string) - (propertize after 'face delim-face)))) - (other (error "Unsupported highlighting style: %S" other))))) - -(defun flycheck-add-overlay (err) - "Add overlay for ERR. - -Return the created overlay." - ;; We must have a proper error region for the sake of fringe indication, - ;; error display and error navigation, even if the highlighting is disabled. - ;; We erase the highlighting later on in this case - (pcase-let* ((`(,beg . ,end) - (if (flycheck-relevant-error-other-file-p err) - ;; Display overlays for other-file errors on the first line - (cons (point-min) - (save-excursion (goto-char (point-min)) - (point-at-eol))) - (flycheck-error-region-for-mode - err (or flycheck-highlighting-mode 'lines)))) - (overlay (make-overlay beg end)) - (level (flycheck-error-level err)) - (category (flycheck-error-level-overlay-category level)) - (index (flycheck--next-overlay-index))) - (unless (flycheck-error-level-p level) - (error "Undefined error level: %S" level)) - (setf (overlay-get overlay 'flycheck-error-index) index) - (setf (overlay-get overlay 'flycheck-overlay) t) - (setf (overlay-get overlay 'flycheck-error) err) - (setf (overlay-get overlay 'category) category) - (setf (overlay-get overlay 'help-echo) #'flycheck-help-echo) - (flycheck--setup-highlighting err overlay) - overlay)) - -(defun flycheck-help-echo (_window object pos) - "Construct a tooltip message. - -Most of the actual work is done by calling -`flycheck-help-echo-function' with the appropriate list of -errors. Arguments WINDOW, OBJECT and POS are as described in -info node `(elisp)Special properties', as this function is -intended to be used as the 'help-echo property of flycheck error -overlays." - (-when-let (buf (cond ((bufferp object) object) - ((overlayp object) (overlay-buffer object)))) - (with-current-buffer buf - (-when-let* ((fn flycheck-help-echo-function) - (errs (flycheck-overlay-errors-at pos))) - (propertize (funcall fn errs) 'help-echo-inhibit-substitution t))))) - -(defun flycheck-help-echo-all-error-messages (errs) - "Concatenate error messages and ids from ERRS." - (pcase (delq nil errs) ;; FIXME why would errors be nil here? - (`(,err) ;; A single error - (flycheck-error-format-message-and-id err)) - (_ ;; Zero or multiple errors - (mapconcat - (lambda (err) - (flycheck-error-format-message-and-id err 'include-snippet)) - errs "\n")))) - -(defun flycheck-filter-overlays (overlays) - "Get all Flycheck overlays from OVERLAYS, in original order." - ;; The order of errors returned from overlays is not stable, so we sort - ;; them again using the internal index to guarantee errors are always - ;; displayed in the same order. - (seq-sort - ;; We can't use `seq-sort-by' here; see above - (lambda (o1 o2) (< (overlay-get o1 'flycheck-error-index) - (overlay-get o2 'flycheck-error-index))) - (seq-filter (lambda (o) (overlay-get o 'flycheck-overlay)) overlays))) - -(defun flycheck-overlays-at (pos) - "Get all Flycheck overlays at POS." - (flycheck-filter-overlays (overlays-at pos))) - -(defun flycheck-overlays-in (beg end) - "Get all Flycheck overlays between BEG and END." - (flycheck-filter-overlays (overlays-in beg end))) - -(defun flycheck-overlay-errors-at (pos) - "Return a list of all flycheck errors overlaid at POS." - (seq-map (lambda (o) (overlay-get o 'flycheck-error)) - (flycheck-overlays-at pos))) - -(defun flycheck-overlay-errors-in (beg end) - "Return a list of all flycheck errors overlaid between BEG and END." - (seq-map (lambda (o) (overlay-get o 'flycheck-error)) - (flycheck-overlays-in beg end))) - -(defvar-local flycheck-overlays-to-delete nil - "Overlays mark for deletion after all syntax checks completed.") -(put 'flycheck-overlays-to-delete 'permanent-local t) - -(defun flycheck-delete-all-overlays () - "Remove all flycheck overlays in the current buffer." - (overlay-recenter (point-max)) - (flycheck-delete-marked-overlays) - (setq flycheck--last-overlay-index 0) - (save-restriction - (widen) - (seq-do #'delete-overlay (flycheck-overlays-in (point-min) (point-max))))) - -(defun flycheck-mark-all-overlays-for-deletion () - "Mark all current overlays for deletion." - (setq flycheck-overlays-to-delete - (append (flycheck-overlays-in (point-min) (point-max)) - flycheck-overlays-to-delete))) - -(defun flycheck-delete-marked-overlays () - "Delete all overlays marked for deletion." - (overlay-recenter (point-max)) - (seq-do #'delete-overlay flycheck-overlays-to-delete) - (setq flycheck-overlays-to-delete nil)) - - -;;; Error navigation in the current buffer -(defun flycheck-error-level-interesting-at-pos-p (pos) - "Check if error severity at POS passes `flycheck-error-level-interesting-p'." - (flycheck-error-level-interesting-p (get-char-property pos 'flycheck-error))) - -(defun flycheck-error-level-interesting-p (err) - "Check if ERR severity is >= `flycheck-navigation-minimum-level'. - -ERR is also interesting (the function returns true) if there are -no errors as or more severe than `flycheck-navigation-minimum-level'." - (when (flycheck-error-p err) - (-if-let (min-level flycheck-navigation-minimum-level) - (or (<= (flycheck-error-level-severity min-level) - (flycheck-error-level-severity (flycheck-error-level err))) - (not (flycheck-has-current-errors-p min-level))) - t))) - -(defun flycheck-next-error-pos (n &optional reset) - "Get the position of the N-th next error. - -With negative N, get the position of the (-N)-th previous error -instead. With non-nil RESET, search from `point-min', otherwise -search from the current point. - -Return the position of the next or previous error, or nil if -there is none. If N is zero, return `point', or `point-min' if -RESET is non-nil." - (let ((n (or n 1)) - (pos (if reset (point-min) (point)))) - (if (>= n 0) - ;; Search forwards - (while (and pos (> n 0)) - (setq n (1- n)) - (when (get-char-property pos 'flycheck-error) - ;; Move beyond from the current error if any - (setq pos (next-single-char-property-change pos 'flycheck-error))) - (while (not (or (= pos (point-max)) - (flycheck-error-level-interesting-at-pos-p pos))) - ;; Scan for the next error - (setq pos (next-single-char-property-change pos 'flycheck-error))) - (when (and (= pos (point-max)) - (not (flycheck-error-level-interesting-at-pos-p pos))) - ;; If we reached the end of the buffer, but no error, we didn't find - ;; any - (setq pos nil))) - ;; Search backwards - (while (and pos (< n 0)) - (setq n (1+ n)) - ;; Loop until we find an error. We need to check the position *before* - ;; the current one, because `previous-single-char-property-change' - ;; always moves to the position *of* the change. - (while (not (or (= pos (point-min)) - (flycheck-error-level-interesting-at-pos-p (1- pos)))) - (setq pos (previous-single-char-property-change pos 'flycheck-error))) - (when (and (= pos (point-min)) - (not (flycheck-error-level-interesting-at-pos-p pos))) - ;; We didn't find any error. - (setq pos nil)) - (when pos - ;; We found an error, so move to its beginning - (setq pos (previous-single-char-property-change pos - 'flycheck-error))))) - pos)) - -(defun flycheck-next-error-function (n reset) - "Visit the N-th error from the current point. - -N is the number of errors to advance by, where a negative N -advances backwards. With non-nil RESET, advance from the -beginning of the buffer, otherwise advance from the current -position. - -Intended for use with `next-error-function'." - (-if-let* ((pos (flycheck-next-error-pos n reset)) - (err (get-char-property pos 'flycheck-error))) - (flycheck-jump-to-error err) - (user-error "No more Flycheck errors"))) - -(defun flycheck-next-error (&optional n reset) - "Visit the N-th error from the current point. - -N is the number of errors to advance by, where a negative N -advances backwards. With non-nil RESET, advance from the -beginning of the buffer, otherwise advance from the current -position." - (interactive "P") - (when (consp n) - ;; Universal prefix argument means reset - (setq reset t n nil)) - (flycheck-next-error-function n reset) - (flycheck-display-error-at-point)) - -(defun flycheck-previous-error (&optional n) - "Visit the N-th previous error. - -If given, N specifies the number of errors to move backwards by. -If N is negative, move forwards instead." - (interactive "P") - (flycheck-next-error (- (or n 1)))) - -(defun flycheck-first-error (&optional n) - "Visit the N-th error from beginning of the buffer. - -If given, N specifies the number of errors to move forward from -the beginning of the buffer." - (interactive "P") - (flycheck-next-error n 'reset)) - - -;;; Listing errors in buffers -(defconst flycheck-error-list-buffer "*Flycheck errors*" - "The name of the buffer to show error lists.") - -(defmacro flycheck-error-list-with-buffer (&rest body) - "Evaluate BODY in flycheck-error-list-buffer, if it exists." - (declare (indent 0) (debug t)) - `(when (get-buffer flycheck-error-list-buffer) - (with-current-buffer flycheck-error-list-buffer - ,@body))) - -(defvar flycheck-error-list-mode-map - (let ((map (make-sparse-keymap))) - (define-key map (kbd "f") #'flycheck-error-list-set-filter) - (define-key map (kbd "F") #'flycheck-error-list-reset-filter) - (define-key map (kbd "n") #'flycheck-error-list-next-error) - (define-key map (kbd "p") #'flycheck-error-list-previous-error) - (define-key map (kbd "g") #'flycheck-error-list-check-source) - (define-key map (kbd "e") #'flycheck-error-list-explain-error) - (define-key map (kbd "RET") #'flycheck-error-list-goto-error) - map) - "The keymap of `flycheck-error-list-mode'.") - -(defun flycheck-error-list-make-last-column (message checker) - "Compute contents of the last error list cell. - -MESSAGE and CHECKER are displayed in a single column to allow the -message to stretch arbitrarily far." - (let ((checker-name (propertize (symbol-name checker) - 'face 'flycheck-error-list-checker-name)) - (message (propertize message - 'face 'flycheck-error-list-error-message))) - (format "%s (%s)" message checker-name))) - -(defconst flycheck-error-list-format - `[("File" 6) - ("Line" 5 flycheck-error-list-entry-< :right-align t) - ("Col" 3 nil :right-align t) - ("Level" 8 flycheck-error-list-entry-level-<) - ("ID" 6 t) - (,(flycheck-error-list-make-last-column "Message" 'Checker) 0 t)] - "Table format for the error list.") - -(defconst flycheck-error-list-padding 1 - "Padding used in error list.") - -(defconst flycheck--error-list-msg-offset - (seq-reduce - (lambda (offset fmt) - (pcase-let* ((`(,_ ,width ,_ . ,props) fmt) - (padding (or (plist-get props :pad-right) 1))) - (+ offset width padding))) - (seq-subseq flycheck-error-list-format 0 -1) - flycheck-error-list-padding) - "Amount of space to use in `flycheck-flush-multiline-message'.") - -(define-derived-mode flycheck-error-list-mode tabulated-list-mode - "Flycheck errors" - "Major mode for listing Flycheck errors. - -\\{flycheck-error-list-mode-map}" - (setq tabulated-list-format flycheck-error-list-format - ;; Sort by location initially - tabulated-list-sort-key (cons "Line" nil) - tabulated-list-padding flycheck-error-list-padding - tabulated-list-entries #'flycheck-error-list-entries - ;; `revert-buffer' updates the mode line for us, so all we need to do is - ;; set the corresponding mode line construct. - mode-line-buffer-identification flycheck-error-list-mode-line) - ;; Guard `truncate-string-ellipsis' for Emacs 24. - ;; TODO: Remove when dropping Emacs 24 compatibility - (when (boundp 'truncate-string-ellipsis) - ;; See https://github.com/flycheck/flycheck/issues/1101 - (setq-local truncate-string-ellipsis "…")) - (tabulated-list-init-header)) - -(defvar-local flycheck-error-list-source-buffer nil - "The current source buffer of the error list.") -;; Needs to permanently local to preserve the source buffer across buffer -;; reversions -(put 'flycheck-error-list-source-buffer 'permanent-local t) - -(defun flycheck-error-list-set-source (buffer) - "Set BUFFER as the source buffer of the error list." - (flycheck-error-list-with-buffer - (setq flycheck-error-list-source-buffer buffer) - (flycheck-error-list-refresh))) - -(defun flycheck-error-list-update-source () - "Make the error list display errors from the current buffer. - -The update is skipped if the current buffer is the error list or -if the error list is already pointing to the current buffer." - (unless (memq (current-buffer) - (list (get-buffer flycheck-error-list-buffer) - (flycheck-error-list-with-buffer - flycheck-error-list-source-buffer))) - (flycheck-error-list-set-source (current-buffer)))) - -(defun flycheck-error-list-check-source () - "Trigger a syntax check in the source buffer of the error list." - (interactive) - (let ((buffer (get-buffer flycheck-error-list-source-buffer))) - (when (buffer-live-p buffer) - (with-current-buffer buffer - (flycheck-buffer))))) - -(define-button-type 'flycheck-error-list - 'action #'flycheck-error-list-goto-error - 'help-echo "mouse-1, RET: goto error" - 'face nil) - -(define-button-type 'flycheck-error-list-explain-error - 'action #'flycheck-error-list-explain-error - 'help-echo "mouse-1, RET: explain error") - -(defsubst flycheck-error-list-make-cell (text &optional face help-echo type) - "Make an error list cell with TEXT and FACE. - -If FACE is nil don't set a FACE on TEXT. If TEXT already has -face properties, do not specify a FACE. Note though, that if -TEXT gets truncated it will not inherit any previous face -properties. If you expect TEXT to be truncated in the error -list, do specify a FACE explicitly! - -If HELP-ECHO is non-nil, set a help-echo property on TEXT, with -value HELP-ECHO. This is convenient if you expect TEXT to be -truncated. - -The cell will have the type TYPE unless TYPE is nil, and the -default type `flycheck-error-list' will be used instead." - (append (list text 'type (if type type - 'flycheck-error-list)) - (and face (list 'face face)) - (and help-echo (list 'help-echo help-echo)))) - -(defsubst flycheck-error-list-make-number-cell (number face) - "Make a table cell for a NUMBER with FACE. - -Convert NUMBER to string, fontify it with FACE and return the -string with attached text properties." - (flycheck-error-list-make-cell - (if (numberp number) (number-to-string number) "") - face)) - -(defun flycheck-error-list-make-entry (error) - "Make a table cell for the given ERROR. - -Return a list with the contents of the table cell." - (let* ((level (flycheck-error-level error)) - (level-face (flycheck-error-level-error-list-face level)) - (filename (flycheck-error-filename error)) - (line (flycheck-error-line error)) - (column (flycheck-error-column error)) - (message (or (flycheck-error-message error) - (format "Unknown %S" level))) - (flushed-msg (flycheck-flush-multiline-message message)) - (id (flycheck-error-id error)) - (id-str (if id (format "%s" id) "")) - (checker (flycheck-error-checker error)) - (msg-and-checker - (flycheck-error-list-make-last-column flushed-msg checker)) - (explainer (flycheck-checker-get checker 'error-explainer))) - (list error - (vector (flycheck-error-list-make-cell - (if filename - (file-name-nondirectory filename) - "") - 'flycheck-error-list-filename) - (flycheck-error-list-make-number-cell - line 'flycheck-error-list-line-number) - (flycheck-error-list-make-number-cell - column 'flycheck-error-list-column-number) - (flycheck-error-list-make-cell - (symbol-name (flycheck-error-level error)) level-face) - ;; Error ID use a different face when an error-explainer is - ;; present - (flycheck-error-list-make-cell - id-str (if explainer 'flycheck-error-list-id-with-explainer - 'flycheck-error-list-id) - id-str 'flycheck-error-list-explain-error) - (flycheck-error-list-make-cell - msg-and-checker nil msg-and-checker))))) - -(defun flycheck-flush-multiline-message (msg) - "Prepare error message MSG for display in the error list. - -Prepend all lines of MSG except the first with enough space to -ensure that they line up properly once the message is displayed." - (let* ((spc-spec `(space . (:width ,flycheck--error-list-msg-offset))) - (spc (propertize " " 'display spc-spec)) - (rep (concat "\\1" spc "\\2"))) - (replace-regexp-in-string "\\([\r\n]+\\)\\(.\\)" rep msg))) - -(defun flycheck-error-list-current-errors () - "Read the list of errors in `flycheck-error-list-source-buffer'." - (when (buffer-live-p flycheck-error-list-source-buffer) - (buffer-local-value 'flycheck-current-errors - flycheck-error-list-source-buffer))) - -(defun flycheck-error-list-entries () - "Create the entries for the error list." - (-when-let* ((errors (flycheck-error-list-current-errors)) - (filtered (flycheck-error-list-apply-filter errors))) - (seq-map #'flycheck-error-list-make-entry filtered))) - -(defun flycheck-error-list-entry-< (entry1 entry2) - "Determine whether ENTRY1 is before ENTRY2 by location. - -See `flycheck-error-<'." - (flycheck-error-< (car entry1) (car entry2))) - -(defun flycheck-error-list-entry-level-< (entry1 entry2) - "Determine whether ENTRY1 is before ENTRY2 by level. - -See `flycheck-error-level-<'." - (not (flycheck-error-level-< (car entry1) (car entry2)))) - -(defvar flycheck-error-list-mode-line-map - (let ((map (make-sparse-keymap))) - (define-key map [mode-line mouse-1] - #'flycheck-error-list-mouse-switch-to-source) - map) - "Keymap for error list mode line.") - -(defun flycheck-error-list-propertized-source-name () - "Get the name of the current source buffer for the mode line. - -Propertize the name of the current source buffer for use in the -mode line indication of `flycheck-error-list-mode'." - (let ((name (replace-regexp-in-string - (rx "%") "%%" - (buffer-name flycheck-error-list-source-buffer) - 'fixed-case 'literal))) - (propertize name 'face 'mode-line-buffer-id - 'mouse-face 'mode-line-highlight - 'help-echo "mouse-1: switch to source" - 'local-map flycheck-error-list-mode-line-map))) - -(defun flycheck-error-list-mouse-switch-to-source (event) - "Switch to the error list source buffer of the EVENT window." - (interactive "e") - (save-selected-window - (when (eventp event) - (select-window (posn-window (event-start event)))) - (when (buffer-live-p flycheck-error-list-source-buffer) - (switch-to-buffer flycheck-error-list-source-buffer)))) - -(defun flycheck-get-error-list-window-list (&optional all-frames) - "Get all windows displaying the error list. - -ALL-FRAMES specifies the frames to consider, as in -`get-buffer-window-list'." - (-when-let (buf (get-buffer flycheck-error-list-buffer)) - (get-buffer-window-list buf nil all-frames))) - -(defun flycheck-get-error-list-window (&optional all-frames) - "Get a window displaying the error list, or nil if none. - -ALL-FRAMES specifies the frames to consider, as in -`get-buffer-window'." - (-when-let (buf (get-buffer flycheck-error-list-buffer)) - (get-buffer-window buf all-frames))) - -(defun flycheck-error-list-recenter-at (pos) - "Recenter the error list at POS." - (dolist (window (flycheck-get-error-list-window-list t)) - (with-selected-window window - (goto-char pos) - (let ((recenter-redisplay nil)) - (recenter))))) - -(defun flycheck-error-list-refresh () - "Refresh the current error list. - -Add all errors currently reported for the current -`flycheck-error-list-source-buffer', and recenter the error -list." - ;; We only refresh the error list, when it is visible in a window, and we - ;; select this window while reverting, because Tabulated List mode attempts to - ;; recenter the error at the old location, so it must have the proper window - ;; selected. - (-when-let (window (flycheck-get-error-list-window t)) - (with-selected-window window - (revert-buffer)) - (run-hooks 'flycheck-error-list-after-refresh-hook) - (let ((preserve-pos (eq (current-buffer) - (get-buffer flycheck-error-list-buffer)))) - ;; If the error list is the current buffer, don't recenter when - ;; highlighting - (flycheck-error-list-highlight-errors preserve-pos)))) - -(defun flycheck-error-list-mode-line-filter-indicator () - "Create a string representing the current error list filter." - (if flycheck-error-list-minimum-level - (format " [>= %s]" flycheck-error-list-minimum-level) - "")) - -(defun flycheck-error-list-set-filter (level) - "Restrict the error list to errors at level LEVEL or higher. - -LEVEL is either an error level symbol, or nil, to remove the filter." - (interactive - (list (flycheck-read-error-level - "Minimum error level (errors at lower levels will be hidden): "))) - (when (and level (not (flycheck-error-level-p level))) - (user-error "Invalid level: %s" level)) - (flycheck-error-list-with-buffer - (setq-local flycheck-error-list-minimum-level level) - (force-mode-line-update) - (flycheck-error-list-refresh) - (flycheck-error-list-recenter-at (point-min)))) - -(defun flycheck-error-list-reset-filter (&optional refresh) - "Remove local error filters and reset to the default filter. - -Interactively, or with non-nil REFRESH, refresh the error list." - (interactive '(t)) - (flycheck-error-list-with-buffer - (kill-local-variable 'flycheck-error-list-minimum-level) - (when refresh - (flycheck-error-list-refresh) - (flycheck-error-list-recenter-at (point-min)) - (force-mode-line-update)))) - -(defun flycheck-error-list-apply-filter (errors) - "Filter ERRORS according to `flycheck-error-list-minimum-level'." - (-if-let* ((min-level flycheck-error-list-minimum-level) - (min-severity (flycheck-error-level-severity min-level))) - (seq-filter (lambda (err) (>= (flycheck-error-level-severity - (flycheck-error-level err)) - min-severity)) - errors) - errors)) - -(defun flycheck-error-list-goto-error (&optional pos) - "Go to the location of the error at POS in the error list. - -POS defaults to `point'." - (interactive) - (-when-let* ((error (tabulated-list-get-id pos))) - (flycheck-jump-to-error error))) - -(defun flycheck-jump-to-error (error) - "Go to the location of ERROR." - (let* ((error-copy (copy-flycheck-error error)) - (filename (flycheck-error-filename error)) - (other-file-error (flycheck-relevant-error-other-file-p error)) - (buffer (if filename - (find-file-noselect filename) - (flycheck-error-buffer error)))) - (when (buffer-live-p buffer) - (setf (flycheck-error-buffer error-copy) buffer) - (flycheck-jump-in-buffer buffer error-copy) - ;; When jumping to an error in another file, it may not have - ;; this error available for highlighting yet, so we trigger a check - ;; if necessary. - (when other-file-error - (with-current-buffer buffer - ;; `seq-contains-p' is only in seq >= 2.21 - (unless (with-no-warnings - (seq-contains flycheck-current-errors error-copy 'equal)) - (when flycheck-mode - (flycheck-buffer)))))))) - -(defun flycheck-jump-in-buffer (buffer error) - "In BUFFER, jump to ERROR." - ;; FIXME: we assume BUFFER and the buffer of ERROR are the same. We don't - ;; need the first argument then. - (if (eq (window-buffer) (get-buffer flycheck-error-list-buffer)) - ;; When called from within the error list, keep the error list, - ;; otherwise replace the current buffer. - (pop-to-buffer buffer 'other-window) - (switch-to-buffer buffer)) - (let ((pos (flycheck-error-pos error))) - (unless (eq (goto-char pos) (point)) - ;; If widening gets in the way of moving to the right place, remove it - ;; and try again - (widen) - (goto-char pos))) - ;; Re-highlight the errors. We have post-command-hook for that, but calls to - ;; `flycheck-jump-in-buffer' that come from other buffers (e.g. from the error - ;; list) won't trigger it. - (flycheck-error-list-highlight-errors 'preserve-pos)) - -(defun flycheck-error-list-explain-error (&optional pos) - "Explain the error at POS in the error list. - -POS defaults to `point'." - (interactive) - (-when-let* ((error (tabulated-list-get-id pos)) - (explainer (flycheck-checker-get (flycheck-error-checker error) - 'error-explainer))) - (flycheck-error-with-buffer error - (-when-let (explanation (funcall explainer error)) - (flycheck-display-error-explanation explanation))))) - -(defun flycheck-error-list-next-error-pos (pos &optional n) - "Starting from POS get the N'th next error in the error list. - -N defaults to 1. If N is negative, search for the previous error -instead. - -Get the beginning position of the N'th next error from POS, or -nil, if there is no next error." - (let ((n (or n 1))) - (if (>= n 0) - ;; Search forward - (while (and pos (/= n 0)) - (setq n (1- n)) - (setq pos (next-single-property-change pos 'tabulated-list-id))) - ;; Search backwards - (while (/= n 0) - (setq n (1+ n)) - ;; We explicitly give the limit here to explicitly have the minimum - ;; point returned, to be able to move to the first error (which starts - ;; at `point-min') - (setq pos (previous-single-property-change pos 'tabulated-list-id - nil (point-min))))) - pos)) - -(defun flycheck-error-list-previous-error (n) - "Go to the N'th previous error in the error list." - (interactive "P") - (flycheck-error-list-next-error (- (or n 1)))) - -(defun flycheck-error-list-next-error (n) - "Go to the N'th next error in the error list." - (interactive "P") - (let ((pos (flycheck-error-list-next-error-pos (point) n))) - (when (and pos (/= pos (point))) - (goto-char pos) - (save-selected-window - ;; Keep the error list selected, so that the user can navigate errors by - ;; repeatedly pressing n/p, without having to re-select the error list - ;; window. - (flycheck-error-list-goto-error))))) - -(defvar-local flycheck-error-list-highlight-overlays nil - "Error highlight overlays in the error list buffer.") -(put 'flycheck-error-list-highlight-overlays 'permanent-local t) - -(defun flycheck-error-list-highlight-errors (&optional preserve-pos) - "Highlight errors in the error list. - -Highlight all errors in the error list that are at point in the -source buffer, and on the same line as point. Then recenter the -error list to the highlighted error, unless PRESERVE-POS is -non-nil." - (when (get-buffer flycheck-error-list-buffer) - (with-current-buffer flycheck-error-list-buffer - (let ((current-errors - (when (buffer-live-p flycheck-error-list-source-buffer) - (with-current-buffer flycheck-error-list-source-buffer - (flycheck-overlay-errors-in (line-beginning-position) - (line-end-position)))))) - (let ((old-overlays flycheck-error-list-highlight-overlays) - (min-point (point-max)) - (max-point (point-min))) - ;; Display the new overlays first, to avoid re-display flickering - (setq flycheck-error-list-highlight-overlays nil) - (when current-errors - (let ((next-error-pos (point-min))) - (while next-error-pos - (let* ((beg next-error-pos) - (end (flycheck-error-list-next-error-pos beg)) - (err (tabulated-list-get-id beg))) - (when (member err current-errors) - (setq min-point (min min-point beg) - max-point (max max-point beg)) - (let ((ov (make-overlay beg - ;; Extend overlay to the beginning - ;; of the next line, to highlight - ;; the whole line - (or end (point-max))))) - (push ov flycheck-error-list-highlight-overlays) - (setf (overlay-get ov 'flycheck-error-highlight-overlay) - t) - (setf (overlay-get ov 'face) - 'flycheck-error-list-highlight))) - (setq next-error-pos end))))) - ;; Delete the old overlays - (seq-do #'delete-overlay old-overlays) - (when (and (not preserve-pos) current-errors) - ;; Move point to the middle error - (goto-char (+ min-point (/ (- max-point min-point) 2))) - (beginning-of-line) - ;; And recenter the error list at this position - (flycheck-error-list-recenter-at (point)))))))) - -(defun flycheck-list-errors () - "Show the error list for the current buffer." - (interactive) - (unless flycheck-mode - (user-error "Flycheck mode not enabled")) - ;; Create and initialize the error list - (unless (get-buffer flycheck-error-list-buffer) - (with-current-buffer (get-buffer-create flycheck-error-list-buffer) - (flycheck-error-list-mode))) - ;; Reset the error filter - (flycheck-error-list-reset-filter) - (let ((source (current-buffer))) - ;; Show the error list in a side window. Under some configurations of - ;; `display-buffer', this may select `flycheck-error-list-buffer' (see URL - ;; `https://github.com/flycheck/flycheck/issues/1776'). - (display-buffer flycheck-error-list-buffer) - ;; Adjust the source, causing a refresh - (flycheck-error-list-set-source source))) - -(defalias 'list-flycheck-errors 'flycheck-list-errors) - - -;;; Displaying errors in the current buffer -(defun flycheck-display-errors (errors) - "Display ERRORS using `flycheck-display-errors-function'." - (when flycheck-display-errors-function - (funcall flycheck-display-errors-function errors))) - -(defvar-local flycheck-display-error-at-point-timer nil - "Timer to automatically show errors.") - -(defun flycheck-cancel-error-display-error-at-point-timer () - "Cancel the error display timer for the current buffer." - (when flycheck-display-error-at-point-timer - (cancel-timer flycheck-display-error-at-point-timer) - (setq flycheck-display-error-at-point-timer nil))) - -(defun flycheck--error-display-tick () - "Return point and tick counter of current buffer." - (cons (point) (buffer-modified-tick))) - -(defvar-local flycheck--last-error-display-tick nil - "Value of `flycheck--error-display-tick' when errors were last displayed.") - -(defun flycheck-display-error-at-point () - "Display all the error messages at point." - (interactive) - ;; This function runs from a timer, so we must take care to not ignore any - ;; errors - (with-demoted-errors "Flycheck error display error: %s" - (flycheck-cancel-error-display-error-at-point-timer) - (setq flycheck--last-error-display-tick (flycheck--error-display-tick)) - (when flycheck-mode - (-when-let (errors (flycheck-overlay-errors-at (point))) - (flycheck-display-errors errors))))) - -(defun flycheck-display-error-at-point-soon () - "Display error messages at point, with a delay." - (setq flycheck--last-error-display-tick nil) - (flycheck-maybe-display-error-at-point-soon)) - -(defun flycheck-maybe-display-error-at-point-soon () - "Display error message at point with a delay, unless already displayed." - (flycheck-cancel-error-display-error-at-point-timer) - (when (and (not (equal flycheck--last-error-display-tick - (setq flycheck--last-error-display-tick - (flycheck--error-display-tick)))) - (flycheck-overlays-at (point))) - (setq flycheck-display-error-at-point-timer - (run-at-time flycheck-display-errors-delay nil - 'flycheck-display-error-at-point)))) - - -;;; Functions to display errors -(defconst flycheck-error-message-buffer "*Flycheck error messages*" - "The name of the buffer to show long error messages in.") - -(defun flycheck-error-message-buffer () - "Get the buffer object to show long error messages in. - -Get the buffer named by variable `flycheck-error-message-buffer', -or nil if the buffer does not exist." - (get-buffer flycheck-error-message-buffer)) - -(defun flycheck-may-use-echo-area-p () - "Determine whether the echo area may be used. - -The echo area may be used if the cursor is not in the echo area, -and if the echo area is not occupied by minibuffer input." - (not (or cursor-in-echo-area (active-minibuffer-window)))) - -(define-derived-mode flycheck-error-message-mode text-mode - "Flycheck error messages" - "Major mode for extended error messages.") - -(defun flycheck-display-error-messages (errors) - "Display the messages of ERRORS. - -Concatenate all non-nil messages of ERRORS as with -`flycheck-help-echo-all-error-messages', and display them with -`display-message-or-buffer', which shows the messages either in -the echo area or in a separate buffer, depending on the number of -lines. See Info node `(elisp)Displaying Messages' for more -information. - -In the latter case, show messages in the buffer denoted by -variable `flycheck-error-message-buffer'." - (when (and errors (flycheck-may-use-echo-area-p)) - (let ((message (flycheck-help-echo-all-error-messages errors))) - (display-message-or-buffer - message flycheck-error-message-buffer 'not-this-window) - ;; We cannot rely on `display-message-or-buffer' returning the right - ;; window. See URL `https://github.com/flycheck/flycheck/issues/1643'. - (-when-let (buf (get-buffer flycheck-error-message-buffer)) - (with-current-buffer buf - (unless (derived-mode-p 'flycheck-error-message-mode) - (flycheck-error-message-mode))))))) - -(defun flycheck-display-error-messages-unless-error-list (errors) - "Show messages of ERRORS unless the error list is visible. - -Like `flycheck-display-error-messages', but only if the error -list (see `flycheck-list-errors') is not visible in any window in -the current frame." - (unless (flycheck-get-error-list-window 'current-frame) - (flycheck-display-error-messages errors))) - -(defun flycheck-hide-error-buffer () - "Hide the Flycheck error buffer if necessary. - -Hide the error buffer if there is no error under point." - (-when-let* ((buffer (flycheck-error-message-buffer)) - (window (get-buffer-window buffer))) - (unless (flycheck-overlays-at (point)) - ;; save-selected-window prevents `quit-window' from changing the current - ;; buffer (see https://github.com/flycheck/flycheck/issues/648). - (save-selected-window - (quit-window nil window))))) - - -;;; Working with errors -(defun flycheck-copy-errors-as-kill (pos &optional formatter) - "Copy each error at POS into kill ring, using FORMATTER. - -FORMATTER is a function to turn an error into a string, -defaulting to `flycheck-error-message'. - -Interactively, use `flycheck-error-format-message-and-id' as -FORMATTER with universal prefix arg, and `flycheck-error-id' with -normal prefix arg, i.e. copy the message and the ID with -universal prefix arg, and only the id with normal prefix arg." - (interactive (list (point) - (pcase current-prefix-arg - ((pred not) #'flycheck-error-message) - ((pred consp) #'flycheck-error-format-message-and-id) - (_ #'flycheck-error-id)))) - (let ((messages (delq nil (seq-map (or formatter #'flycheck-error-message) - (flycheck-overlay-errors-at pos))))) - (when messages - (seq-do #'kill-new (reverse messages)) - (message (string-join messages "\n"))))) - -(defun flycheck-explain-error-at-point () - "Display an explanation for the first explainable error at point. - -The first explainable error at point is the first error at point -with a non-nil `:error-explainer' function defined in its -checker. The `:error-explainer' function is then called with -this error to produce the explanation to display." - (interactive) - (-when-let* ((first-error - ;; Get the first error at point that has an `error-explainer'. - (seq-find (lambda (error) - (flycheck-checker-get - (flycheck-error-checker error) 'error-explainer)) - (flycheck-overlay-errors-at (point)))) - (explainer - (flycheck-checker-get (flycheck-error-checker first-error) - 'error-explainer)) - (explanation (funcall explainer first-error))) - (flycheck-display-error-explanation explanation))) - -(defconst flycheck-explain-error-buffer "*Flycheck error explanation*" - "The name of the buffer to show error explanations.") - -(define-derived-mode flycheck-explain-error-mode help-mode - "Error explanation" - "Major mode for displaying error explanations." - (setq buffer-read-only t)) - -(defun flycheck-display-error-explanation (explanation) - "Display the EXPLANATION for an error." - (pcase explanation - (`nil) - (`(url . ,url) (browse-url url)) - (_ (let ((inhibit-read-only t) - (standard-output (temp-buffer-window-setup - flycheck-explain-error-buffer))) - (with-current-buffer standard-output - (flycheck-explain-error-mode)) - (cond - ((functionp explanation) (funcall explanation)) - ((stringp explanation) (princ explanation)) - (t (error "Unsupported error explanation: %S" explanation))) - (display-message-or-buffer standard-output nil 'not-this-window))))) - - -;;; Syntax checkers using external commands -(defun flycheck-command-argument-p (arg) - "Check whether ARG is a valid command argument." - (pcase arg - ((pred stringp) t) - ((or `source `source-inplace `source-original) t) - (`(,(or `source `source-inplace) ,suffix) - (stringp suffix)) - ((or `temporary-directory `temporary-file-name) t) - (`null-device t) - (`(config-file ,option-name ,config-file-var) - (and (stringp option-name) - (symbolp config-file-var))) - (`(config-file ,option-name ,config-file-var ,prepender) - (and (stringp option-name) - (symbolp config-file-var) - (symbolp prepender))) - (`(,(or `option `option-list) ,option-name ,option-var) - (and (stringp option-name) - (symbolp option-var))) - (`(,(or `option `option-list) ,option-name ,option-var ,prepender) - (and (stringp option-name) - (symbolp option-var) - (symbolp prepender))) - (`(,(or `option `option-list) ,option-name ,option-var ,prepender ,filter) - (and (stringp option-name) - (symbolp option-var) - (symbolp prepender) - (symbolp filter))) - (`(option-flag ,option-name ,option-var) - (and (stringp option-name) - (symbolp option-var))) - (`(eval ,_) t) - (_ nil))) - -(defun flycheck-compute-working-directory (checker) - "Get the default working directory for CHECKER. - -Compute the value of `default-directory' for the invocation of -the syntax checker command, by calling the function in the -`working-directory' property of CHECKER, with CHECKER as sole -argument, and returning its value. Signal an error if the -function returns a non-existing working directory. - -If the property is undefined or if the function returns nil -return the `default-directory' of the current buffer." - (let* ((def-directory-fn (flycheck-checker-get checker 'working-directory)) - (directory (or (and def-directory-fn - (funcall def-directory-fn checker)) - ;; Default to the `default-directory' of the current - ;; buffer - default-directory))) - (unless (file-exists-p directory) - (error ":working-directory %s of syntax checker %S does not exist" - directory checker)) - directory)) - -;;;###autoload -(defun flycheck-define-command-checker (symbol docstring &rest properties) - "Define SYMBOL as syntax checker to run a command. - -Define SYMBOL as generic syntax checker via -`flycheck-define-generic-checker', which uses an external command -to check the buffer. SYMBOL and DOCSTRING are the same as for -`flycheck-define-generic-checker'. - -In addition to the properties understood by -`flycheck-define-generic-checker', the following PROPERTIES -constitute a command syntax checker. Unless otherwise noted, all -properties are mandatory. Note that the default `:error-filter' -of command checkers is `flycheck-sanitize-errors'. - -`:command COMMAND' - The command to run for syntax checking. - - COMMAND is a list of the form `(EXECUTABLE [ARG ...])'. - - EXECUTABLE is a string with the executable of this syntax - checker. It can be overridden with the variable - `flycheck-SYMBOL-executable'. Note that this variable is - NOT implicitly defined by this function. Use - `flycheck-def-executable-var' to define this variable. - - Each ARG is an argument to the executable, either as string, - or as special symbol or form for - `flycheck-substitute-argument', which see. - -`:error-patterns PATTERNS' - A list of patterns to parse the output of the `:command'. - - Each ITEM in PATTERNS is a list `(LEVEL SEXP ...)', where - LEVEL is a Flycheck error level (see - `flycheck-define-error-level'), followed by one or more RX - `SEXP's which parse an error of that level and extract line, - column, file name and the message. - - See `rx' for general information about RX, and - `flycheck-rx-to-string' for some special RX forms provided - by Flycheck. - - All patterns are applied in the order of declaration to the - whole output of the syntax checker. Output already matched - by a pattern will not be matched by subsequent patterns. In - other words, the first pattern wins. - - This property is optional. If omitted, however, an - `:error-parser' is mandatory. - -`:error-parser FUNCTION' - A function to parse errors with. - - The function shall accept three arguments OUTPUT CHECKER - BUFFER. OUTPUT is the syntax checker output as string, - CHECKER the syntax checker that was used, and BUFFER a - buffer object representing the checked buffer. The function - must return a list of `flycheck-error' objects parsed from - OUTPUT. - - This property is optional. If omitted, it defaults to - `flycheck-parse-with-patterns'. In this case, - `:error-patterns' is mandatory. - -`:standard-input t' - Whether to send the buffer contents on standard input. - - If this property is given and has a non-nil value, send the - contents of the buffer on standard input. - - Defaults to nil. - -Note that you may not give `:start', `:interrupt', and -`:print-doc' for a command checker. You can give a custom -`:verify' function, though, whose results will be appended to the -default `:verify' function of command checkers." - (declare (indent 1) - (doc-string 2)) - (dolist (prop '(:start :interrupt :print-doc)) - (when (plist-get properties prop) - (error "%s not allowed in definition of command syntax checker %s" - prop symbol))) - - (unless (plist-get properties :error-filter) - ;; Default to `flycheck-sanitize-errors' as error filter - (setq properties (plist-put properties :error-filter - #'flycheck-sanitize-errors))) - (let ((verify-fn (plist-get properties :verify))) - (setq properties - (plist-put properties :verify - (lambda (checker) - (append (flycheck-verify-command-checker checker) - (and verify-fn - (funcall verify-fn checker))))))) - - (let ((command (plist-get properties :command)) - (patterns (plist-get properties :error-patterns)) - (parser (or (plist-get properties :error-parser) - #'flycheck-parse-with-patterns)) - (enabled (plist-get properties :enabled)) - (standard-input (plist-get properties :standard-input))) - (unless command - (error "Missing :command in syntax checker %s" symbol)) - (unless (stringp (car command)) - (error "Command executable for syntax checker %s must be a string: %S" - symbol (car command))) - (dolist (arg (cdr command)) - (unless (flycheck-command-argument-p arg) - (error "Invalid command argument %S in syntax checker %s" arg symbol))) - (when (and (eq parser 'flycheck-parse-with-patterns) - (not patterns)) - (error "Missing :error-patterns in syntax checker %s" symbol)) - - (setq properties - ;; Automatically disable command checkers if the executable does not - ;; exist. - (plist-put properties :enabled - (lambda () - (and (flycheck-find-checker-executable symbol) - (flycheck-temp-files-writable-p symbol) - (or (not enabled) (funcall enabled)))))) - - (apply #'flycheck-define-generic-checker symbol docstring - :start #'flycheck-start-command-checker - :interrupt #'flycheck-interrupt-command-checker - :print-doc #'flycheck-command-checker-print-doc - properties) - - ;; Pre-compile all errors patterns into strings, so that we don't need to do - ;; that on each error parse - (let ((patterns (seq-map (lambda (p) - (cons (flycheck-rx-to-string `(and ,@(cdr p)) - 'no-group) - (car p))) - patterns))) - (pcase-dolist (`(,prop . ,value) - `((command . ,command) - (error-parser . ,parser) - (error-patterns . ,patterns) - (standard-input . ,standard-input))) - (setf (flycheck-checker-get symbol prop) value))))) - -(eval-and-compile - ;; Make this function available during byte-compilation, since we need it - ;; at macro expansion of `flycheck-def-executable-var'. - (defun flycheck-checker-executable-variable (checker) - "Get the executable variable of CHECKER. - -The executable variable is named `flycheck-CHECKER-executable'." - (intern (format "flycheck-%s-executable" checker)))) - -(defun flycheck-checker-default-executable (checker) - "Get the default executable of CHECKER." - (car (flycheck-checker-get checker 'command))) - -(defun flycheck-checker-executable (checker) - "Get the command executable of CHECKER. - -The executable is either the value of the variable -`flycheck-CHECKER-executable', or the default executable given in -the syntax checker definition, if the variable is nil." - (let ((var (flycheck-checker-executable-variable checker))) - (or (and (boundp var) (symbol-value var)) - (flycheck-checker-default-executable checker)))) - -(defun flycheck-find-checker-executable (checker) - "Get the full path of the executable of CHECKER. - -Return the full absolute path to the executable of CHECKER, or -nil if the executable does not exist." - (funcall flycheck-executable-find (flycheck-checker-executable checker))) - -(defun flycheck-call-checker-process - (checker infile destination error &rest args) - "Call CHECKER's executable with ARGS. - -Return nil (or raise an error if ERROR is non-nil) when CHECKER's -executable cannot be found, and return a numeric exit status or a -signal description string otherwise. CHECKER's input is taken -from INFILE, and its output is sent to DESTINATION, as in -`call-process'." - (-if-let (executable (flycheck-find-checker-executable checker)) - (condition-case err - (apply #'call-process executable infile destination nil args) - (error (when error (signal (car err) (cdr err))))) - (when error - (user-error "Cannot find `%s' using `flycheck-executable-find'" - (flycheck-checker-executable checker))))) - -(defun flycheck-call-checker-process-for-output - (checker infile error &rest args) - "Call CHECKER's executable with ARGS and return its output. - -Call `flycheck-call-checker-process' with INFILE, ERROR, and -ARGS. If it returns 0, return the process' output. Otherwise, -return nil or throw an error. - -This function is similar to `flycheck-call-checker-process' -called in a `with-output-to-string' block, but it takes care of -the error checking automatically." - (let ((temp (generate-new-buffer " *temp*"))) - (unwind-protect - ;; We need to call the checker process in the right buffer, so that it - ;; uses the right exec-path, checker executable, etc. See URL - ;; `https://github.com/flycheck/flycheck/issues/1770'. - (let ((exit-code (apply #'flycheck-call-checker-process - checker infile temp error args)) - (output (with-current-buffer temp (buffer-string)))) - (if (eql 0 exit-code) output - (when error - (error "Process %s failed with %S (%s)" - checker exit-code output)))) - (kill-buffer temp)))) - -(defun flycheck-checker-arguments (checker) - "Get the command arguments of CHECKER." - (cdr (flycheck-checker-get checker 'command))) - -(defun flycheck-substitute-argument (arg checker) - "Substitute ARG for CHECKER. - -Return a list of real arguments for the executable of CHECKER, -substituted for the symbolic argument ARG. Single arguments, -e.g. if ARG is a literal strings, are wrapped in a list. - -ARG may be one of the following forms: - -STRING - Return ARG unchanged. - -`source', `source-inplace' - Create a temporary file to check and return its path. With - `source-inplace' create the temporary file in the same - directory as the original file. The value of - `flycheck-temp-prefix' is used as prefix of the file name. - - With `source', try to retain the non-directory component of - the buffer's file name in the temporary file. - - `source' is the preferred way to pass the input file to a - syntax checker. `source-inplace' should only be used if the - syntax checker needs other files from the source directory, - such as include files in C. - -`(source SUFFIX)', `(source-inplace SUFFIX)' - Like `source' and `source-inplace', but ensure generated - file names end with the given suffix. Use this when the - checker requires that file names on its command line have a - certain suffix (file extension). - -`source-original' - Return the path of the actual file to check, or an empty - string if the buffer has no file name. - - Note that the contents of the file may not be up to date - with the contents of the buffer to check. Do not use this - as primary input to a checker, unless absolutely necessary. - - When using this symbol as primary input to the syntax - checker, add `flycheck-buffer-saved-p' to the `:predicate'. - -`temporary-directory' - Create a unique temporary directory and return its path. - -`temporary-file-name' - Return a unique temporary filename. The file is *not* - created. - - To ignore the output of syntax checkers, try symbol - `null-device' first. - -symbol `null-device' - Return the value of variable `null-device', i.e the system - null device. - - Use this option to ignore the output of a syntax checker. - If the syntax checker cannot handle the null device, or - won't write to an existing file, try `temporary-file-name' - instead. - -`(config-file OPTION VARIABLE [PREPEND-FN])' - Search the configuration file bound to VARIABLE with - `flycheck-locate-config-file' and return a list of arguments - that pass this configuration file to the syntax checker, or - nil if the configuration file was not found. - - PREPEND-FN is called with the OPTION and the located - configuration file, and should return OPTION prepended - before the file, either a string or as list. If omitted, - PREPEND-FN defaults to `list'. - -`(option OPTION VARIABLE [PREPEND-FN [FILTER]])' - Retrieve the value of VARIABLE and return a list of - arguments that pass this value as value for OPTION to the - syntax checker. - - PREPEND-FN is called with the OPTION and the value of - VARIABLE, and should return OPTION prepended before the - file, either a string or as list. If omitted, PREPEND-FN - defaults to `list'. - - FILTER is an optional function to be applied to the value of - VARIABLE before prepending. This function must return nil - or a string. In the former case, return nil. In the latter - case, return a list of arguments as described above. - -`(option-list OPTION VARIABLE [PREPEND-FN [FILTER]])' - Retrieve the value of VARIABLE, which must be a list, - and prepend OPTION before each item in this list, using - PREPEND-FN. - - PREPEND-FN is called with the OPTION and each item of the - list as second argument, and should return OPTION prepended - before the item, either as string or as list. If omitted, - PREPEND-FN defaults to `list'. - - FILTER is an optional function to be applied to each item in - the list before prepending OPTION. It shall return the - option value for each item as string, or nil, if the item is - to be ignored. - -`(option-flag OPTION VARIABLE)' - Retrieve the value of VARIABLE and return OPTION, if the - value is non-nil. Otherwise return nil. - -`(eval FORM)' - Return the result of evaluating FORM in the buffer to be - checked. FORM must either return a string or a list of - strings, or nil to indicate that nothing should be - substituted for CELL. For all other return types, signal an - error - - _No_ further substitutions are performed, neither in FORM - before it is evaluated, nor in the result of evaluating - FORM. - -In all other cases, signal an error. - -Note that substitution is *not* recursive. No symbols or cells -are substituted within the body of cells!" - (pcase arg - ((pred stringp) (list arg)) - (`source - (list (flycheck-save-buffer-to-temp #'flycheck-temp-file-system))) - (`source-inplace - (list (flycheck-save-buffer-to-temp #'flycheck-temp-file-inplace))) - (`(source ,suffix) - (list (flycheck-save-buffer-to-temp - (lambda (filename) (flycheck-temp-file-system filename suffix))))) - (`(source-inplace ,suffix) - (list (flycheck-save-buffer-to-temp - (lambda (filename) (flycheck-temp-file-inplace filename suffix))))) - (`source-original (list (or (buffer-file-name) ""))) - (`temporary-directory (list (flycheck-temp-dir-system))) - (`temporary-file-name - (let ((directory (flycheck-temp-dir-system))) - (list (make-temp-name (expand-file-name "flycheck" directory))))) - (`null-device (list null-device)) - (`(config-file ,option-name ,file-name-var) - (-when-let* ((value (symbol-value file-name-var)) - (file-name (flycheck-locate-config-file value checker))) - (flycheck-prepend-with-option option-name (list file-name)))) - (`(config-file ,option-name ,file-name-var ,prepend-fn) - (-when-let* ((value (symbol-value file-name-var)) - (file-name (flycheck-locate-config-file value checker))) - (flycheck-prepend-with-option option-name (list file-name) prepend-fn))) - (`(option ,option-name ,variable) - (-when-let (value (symbol-value variable)) - (unless (stringp value) - (error "Value %S of %S for option %s is not a string" - value variable option-name)) - (flycheck-prepend-with-option option-name (list value)))) - (`(option ,option-name ,variable ,prepend-fn) - (-when-let (value (symbol-value variable)) - (unless (stringp value) - (error "Value %S of %S for option %s is not a string" - value variable option-name)) - (flycheck-prepend-with-option option-name (list value) prepend-fn))) - (`(option ,option-name ,variable ,prepend-fn ,filter) - (-when-let (value (funcall filter (symbol-value variable))) - (unless (stringp value) - (error "Value %S of %S (filter: %S) for option %s is not a string" - value variable filter option-name)) - (flycheck-prepend-with-option option-name (list value) prepend-fn))) - (`(option-list ,option-name ,variable) - (let ((value (symbol-value variable))) - (unless (and (listp value) (seq-every-p #'stringp value)) - (error "Value %S of %S for option %S is not a list of strings" - value variable option-name)) - (flycheck-prepend-with-option option-name value))) - (`(option-list ,option-name ,variable ,prepend-fn) - (let ((value (symbol-value variable))) - (unless (and (listp value) (seq-every-p #'stringp value)) - (error "Value %S of %S for option %S is not a list of strings" - value variable option-name)) - (flycheck-prepend-with-option option-name value prepend-fn))) - (`(option-list ,option-name ,variable ,prepend-fn ,filter) - (let ((value (delq nil (seq-map filter (symbol-value variable))))) - (unless (and (listp value) (seq-every-p #'stringp value)) - (error "Value %S of %S for option %S is not a list of strings" - value variable option-name)) - (flycheck-prepend-with-option option-name value prepend-fn))) - (`(option-flag ,option-name ,variable) - (when (symbol-value variable) - (list option-name))) - (`(eval ,form) - (let ((result (eval form))) - (cond - ((and (listp result) (seq-every-p #'stringp result)) result) - ((stringp result) (list result)) - (t (error "Invalid result from evaluation of %S: %S" form result))))) - (_ (error "Unsupported argument %S" arg)))) - -(defun flycheck-checker-substituted-arguments (checker) - "Get the substituted arguments of a CHECKER. - -Substitute each argument of CHECKER using -`flycheck-substitute-argument'. This replaces any special -symbols in the command." - (apply #'append - (seq-map (lambda (arg) (flycheck-substitute-argument arg checker)) - (flycheck-checker-arguments checker)))) - -(defun flycheck--process-send-buffer-contents-chunked (process) - "Send contents of current buffer to PROCESS in small batches. - -Send the entire buffer to the standard input of PROCESS in chunks -of 4096 characters. Chunking is done in Emacs Lisp, hence this -function is probably far less efficient than -`send-process-region'. Use only when required." - (let ((from (point-min))) - (while (< from (point-max)) - (let ((to (min (+ from 4096) (point-max)))) - (process-send-region process from to) - (setq from to))))) - -(defvar flycheck-chunked-process-input - ;; Chunk process output on Windows to work around - ;; https://github.com/flycheck/flycheck/issues/794 and - ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22344. The presence of - ;; `w32-pipe-buffer-size' denotes an Emacs version (> Emacs 25.1) where pipe - ;; writes on Windows are fixed. - ;; - ;; TODO: Remove option and chunking when dropping Emacs 24 support, see - ;; https://github.com/flycheck/flycheck/issues/856 - (and (eq system-type 'windows-nt) (not (boundp 'w32-pipe-buffer-size))) - "If non-nil send process input in small chunks. - -If this variable is non-nil `flycheck-process-send-buffer' sends -buffer contents in small chunks. - -Defaults to nil, except on Windows to work around Emacs bug -#22344.") - -(defun flycheck-process-send-buffer (process) - "Send all contents of current buffer to PROCESS. - -Sends all contents of the current buffer to the standard input of -PROCESS, and terminates standard input with EOF. - -If `flycheck-chunked-process-input' is non-nil, send buffer -contents in chunks via -`flycheck--process-send-buffer-contents-chunked', which see. -Otherwise use `process-send-region' to send all contents at once -and rely on Emacs' own buffering and chunking." - (save-restriction - (widen) - (if flycheck-chunked-process-input - (flycheck--process-send-buffer-contents-chunked process) - (process-send-region process (point-min) (point-max)))) - (process-send-eof process)) - -(defun flycheck--wrap-command (prog args) - "Wrap PROG and ARGS using `flycheck-command-wrapper-function'." - ;; We don't call `flycheck-executable-find' on the output of the wrapper - ;; function, since it might not expect it (an executable-find function - ;; designed to find binaries in a sandbox could get confused if we asked it - ;; about the sandboxing program itself). - (funcall flycheck-command-wrapper-function (cons prog args))) - -(defun flycheck-start-command-checker (checker callback) - "Start a command CHECKER with CALLBACK." - (let (process) - (condition-case err - (let* ((program (flycheck-find-checker-executable checker)) - (args (flycheck-checker-substituted-arguments checker)) - (command (flycheck--wrap-command program args)) - (sentinel-events nil) - ;; Use pipes to receive output from the syntax checker. They are - ;; more efficient and more robust than PTYs, which Emacs uses by - ;; default, and since we don't need any job control features, we - ;; can easily use pipes. - (process-connection-type nil)) - ;; We pass do not associate the process with any buffer, by - ;; passing nil for the BUFFER argument of `start-process'. - ;; Instead, we just remember the buffer being checked in a - ;; process property (see below). This neatly avoids all - ;; side-effects implied by attached a process to a buffer, which - ;; may cause conflicts with other packages. - ;; - ;; See https://github.com/flycheck/flycheck/issues/298 for an - ;; example for such a conflict. - (setq process (apply 'start-process (format "flycheck-%s" checker) - nil command)) - ;; Process sentinels can be called while sending input to the process. - ;; We want to record errors raised by process-send before calling - ;; `flycheck-handle-signal', so initially just accumulate events. - (setf (process-sentinel process) - (lambda (_ event) (push event sentinel-events))) - (setf (process-filter process) #'flycheck-receive-checker-output) - (set-process-query-on-exit-flag process nil) - ;; Remember the syntax checker, the buffer and the callback - (process-put process 'flycheck-checker checker) - (process-put process 'flycheck-callback callback) - (process-put process 'flycheck-buffer (current-buffer)) - ;; The default directory is bound in the `flycheck-syntax-check-start' - ;; function. - (process-put process 'flycheck-working-directory default-directory) - ;; Track the temporaries created by argument substitution in the - ;; process itself, to get rid of the global state ASAP. - (process-put process 'flycheck-temporaries flycheck-temporaries) - (setq flycheck-temporaries nil) - ;; Send the buffer to the process on standard input, if enabled. - (when (flycheck-checker-get checker 'standard-input) - (condition-case err - (flycheck-process-send-buffer process) - ;; Some checkers exit before reading all input, causing errors - ;; such as a `file-error' for a closed pipe, or a plain “no longer - ;; connected to pipe; closed it” error for a disconnection. We - ;; report them if needed in `flycheck-finish-checker-process' (see - ;; `https://github.com/flycheck/flycheck/issues/1278'). - (error (process-put process 'flycheck-error err)))) - ;; Set the actual sentinel and process any events that might have - ;; happened while we were sending input. - (setf (process-sentinel process) #'flycheck-handle-signal) - (dolist (event (nreverse sentinel-events)) - (flycheck-handle-signal process event)) - ;; Return the process. - process) - (error - ;; In case of error, clean up our resources, and report the error back to - ;; Flycheck. - (flycheck-safe-delete-temporaries) - (when process - ;; No need to explicitly delete the temporary files of the process, - ;; because deleting runs the sentinel, which will delete them anyway. - (delete-process process)) - (signal (car err) (cdr err)))))) - -(defun flycheck-interrupt-command-checker (_checker process) - "Interrupt a PROCESS." - ;; Deleting the process always triggers the sentinel, which does the cleanup - (when process - (delete-process process))) - -(defun flycheck-command-checker-print-doc (checker) - "Print additional documentation for a command CHECKER." - (let ((executable (flycheck-checker-default-executable checker)) - (config-file-var (flycheck-checker-get checker 'config-file-var)) - (option-vars (seq-sort #'string< - (flycheck-checker-get checker 'option-vars)))) - (princ "\n") - - (let ((doc-start (with-current-buffer standard-output (point-max)))) - ;; Track the start of our documentation so that we can re-indent it - ;; properly - (princ " This syntax checker executes \"") - (princ executable) - (princ "\"") - (when config-file-var - (princ ", using a configuration file from `") - (princ (symbol-name config-file-var)) - (princ "'")) - (princ ". The executable can be overridden with `") - (princ (symbol-name (flycheck-checker-executable-variable checker))) - (princ "'.") - - (with-current-buffer standard-output - (save-excursion - (fill-region-as-paragraph doc-start (point-max))))) - (princ "\n") - (when option-vars - (princ - "\n This syntax checker can be configured with these options:\n\n") - (dolist (var option-vars) - (princ (format " * `%s'\n" var)))))) - -(defun flycheck-verify-command-checker (checker) - "Verify a command CHECKER in the current buffer. - -Return a list of `flycheck-verification-result' objects for -CHECKER." - (let ((executable (flycheck-find-checker-executable checker)) - (config-file-var (flycheck-checker-get checker 'config-file-var))) - `( - ,(flycheck-verification-result-new - :label "executable" - :message (if executable (format "Found at %s" executable) "Not found") - :face (if executable 'success '(bold error))) - ,@(when config-file-var - (let* ((value (symbol-value config-file-var)) - (path (and value (flycheck-locate-config-file value checker)))) - (list (flycheck-verification-result-new - :label "configuration file" - :message (if path (format "Found at %S" path) "Not found") - :face (if path 'success 'warning))))) - ,@(when (not (flycheck-temp-files-writable-p checker)) - (list (flycheck-verification-result-new - :label "temp directory" - :message (format "%s is not writable" - (flycheck-temp-directory checker)) - :face 'error)))))) - - -;;; Process management for command syntax checkers -(defun flycheck-receive-checker-output (process output) - "Receive a syntax checking PROCESS OUTPUT." - (push output (process-get process 'flycheck-pending-output))) - -(defun flycheck-get-output (process) - "Get the complete output of PROCESS." - (with-demoted-errors "Error while retrieving process output: %S" - (let ((pending-output (process-get process 'flycheck-pending-output))) - (apply #'concat (nreverse pending-output))))) - -(defun flycheck-handle-signal (process _event) - "Handle a signal from the syntax checking PROCESS. - -_EVENT is ignored." - (when (memq (process-status process) '(signal exit)) - (let ((files (process-get process 'flycheck-temporaries)) - (buffer (process-get process 'flycheck-buffer)) - (callback (process-get process 'flycheck-callback)) - (cwd (process-get process 'flycheck-working-directory)) - (err (process-get process 'flycheck-error))) - ;; Delete the temporary files - (seq-do #'flycheck-safe-delete files) - (when (buffer-live-p buffer) - (with-current-buffer buffer - (condition-case err - (pcase (process-status process) - (`signal - (funcall callback 'interrupted)) - (`exit - (flycheck-finish-checker-process - (process-get process 'flycheck-checker) - (or err (process-exit-status process)) - files - (flycheck-get-output process) callback cwd))) - ((debug error) - (funcall callback 'errored (error-message-string err))))))))) - -(defun flycheck-finish-checker-process - (checker exit-status files output callback cwd) - "Finish a checker process from CHECKER with EXIT-STATUS. - -EXIT-STATUS can be a number or an arbitrary form (if it is not 0, -a `suspicious' status is reported to CALLBACK). - -FILES is a list of files given as input to the checker. OUTPUT -is the output of the syntax checker. CALLBACK is the status -callback to use for reporting. - -Parse the OUTPUT and report an appropriate error status. - -Resolve all errors in OUTPUT using CWD as working directory." - (let ((errors (flycheck-parse-output output checker (current-buffer)))) - (when (and (not (equal exit-status 0)) (null errors)) - ;; Warn about a suspicious result from the syntax checker. We do right - ;; after parsing the errors, before filtering, because a syntax checker - ;; might report errors from other files (e.g. includes) even if there - ;; are no errors in the file being checked. - (funcall callback 'suspicious - (format "Flycheck checker %S returned %S, but \ -its output contained no errors: %s\nTry installing a more \ -recent version of %S, and please open a bug report if the issue \ -persists in the latest release. Thanks!" checker exit-status -output checker))) - (funcall callback 'finished - ;; Fix error file names, by substituting them backwards from the - ;; temporaries. - (seq-map (lambda (e) (flycheck-fix-error-filename e files cwd)) - errors)))) - - -;;; Executables of command checkers. -(defmacro flycheck-def-executable-var (checker default-executable) - "Define the executable variable for CHECKER. - -DEFAULT-EXECUTABLE is the default executable. It is only used in -the docstring of the variable. - -The variable is defined with `defcustom' in the -`flycheck-executables' group. It's also defined to be risky as -file-local variable, to avoid arbitrary executables being used -for syntax checking." - (let ((executable-var (flycheck-checker-executable-variable checker))) - `(progn - (defcustom ,executable-var nil - ,(format "The executable of the %s syntax checker. - -Either a string containing the name or the path of the -executable, or nil to use the default executable from the syntax -checker declaration. - -The default executable is %S." checker default-executable) - :type '(choice (const :tag "Default executable" nil) - (string :tag "Name or path")) - :group 'flycheck-executables - :risky t)))) - -(defun flycheck-set-checker-executable (checker &optional executable) - "Set the executable of CHECKER in the current buffer. - -CHECKER is a syntax checker symbol. EXECUTABLE is a string with -the name of an executable or the path to an executable file, which -is to be used as executable for CHECKER. If omitted or nil, -reset the executable of CHECKER. - -Interactively, prompt for a syntax checker and an executable -file, and set the executable of the selected syntax checker. -With prefix arg, prompt for a syntax checker only, and reset the -executable of the select checker to the default. - -Set the executable variable of CHECKER, that is, -`flycheck-CHECKER-executable' to EXECUTABLE. Signal -`user-error', if EXECUTABLE does not denote a command or an -executable file. - -This command is intended for interactive use only. In Lisp, just -`let'-bind the corresponding variable, or set it directly. Use -`flycheck-checker-executable-variable' to obtain the executable -variable symbol for a syntax checker." - (declare (interactive-only "Set the executable variable directly instead")) - (interactive - (let* ((checker (flycheck-read-checker "Syntax checker: ")) - (default-executable (flycheck-checker-default-executable checker)) - (executable (if current-prefix-arg - nil - (read-file-name "Executable: " nil default-executable - nil nil flycheck-executable-find)))) - (list checker executable))) - (when (and executable (not (funcall flycheck-executable-find executable))) - (user-error "%s is no executable" executable)) - (let ((variable (flycheck-checker-executable-variable checker))) - (set (make-local-variable variable) executable))) - - -;;; Configuration files and options for command checkers -(defun flycheck-register-config-file-var (var checkers) - "Register VAR as config file var for CHECKERS. - -CHECKERS is a single syntax checker or a list thereof." - (when (symbolp checkers) - (setq checkers (list checkers))) - (dolist (checker checkers) - (setf (flycheck-checker-get checker 'config-file-var) var))) - -;;;###autoload -(defmacro flycheck-def-config-file-var (symbol checker &optional file-name - &rest custom-args) - "Define SYMBOL as config file variable for CHECKER, with default FILE-NAME. - -SYMBOL is declared as customizable variable using `defcustom', to -provide configuration files for the given syntax CHECKER. -CUSTOM-ARGS are forwarded to `defcustom'. - -FILE-NAME is the initial value of the new variable. If omitted, -the default value is nil. It can be either a string or a list of -strings. - -Use this together with the `config-file' form in the `:command' -argument to `flycheck-define-checker'." - (declare (indent 3)) - `(progn - (defcustom ,symbol ,file-name - ,(format "Configuration file for `%s'. - -If set to a string, locate the configuration file using the -functions from `flycheck-locate-config-file-functions'. If the -file is found pass it to the syntax checker as configuration -file. - -If no configuration file is found, or if this variable is set to -nil, invoke the syntax checker without a configuration file. - -Use this variable as file-local variable if you need a specific -configuration file for a buffer." checker) - :type '(choice (const :tag "No configuration file" nil) - (string :tag "File name or path") - (repeat :tag "File names or paths" string)) - :safe #'flycheck-string-or-string-list-p - :group 'flycheck-config-files - ,@custom-args) - (flycheck-register-config-file-var ',symbol ',checker))) - -(defun flycheck-locate-config-file (filenames checker) - "Locate the configuration file for CHECKER, based on FILENAMES. - -FILENAMES can be either a single file, or a list. Each filename -is passed to all `flycheck-locate-config-file-functions', until -one returns non-nil. - -Return the absolute path of the configuration file, or nil if no -configuration file was found." - (when (stringp filenames) - (setq filenames (list filenames))) - (let ((config-file nil)) - (while (and filenames (null config-file)) - (setq config-file (run-hook-with-args-until-success - 'flycheck-locate-config-file-functions - (pop filenames) checker))) - (when (and config-file (file-exists-p config-file)) - config-file))) - -(defun flycheck-locate-config-file-by-path (filepath _checker) - "Locate a configuration file by a FILEPATH. - -If FILEPATH is a contains a path separator, expand it against the -default directory and return it if it points to an existing file. -Otherwise return nil. - -_CHECKER is ignored." - ;; If the path is just a plain file name, skip it. - (unless (string= (file-name-nondirectory filepath) filepath) - (let ((file-name (expand-file-name filepath))) - (and (file-exists-p file-name) file-name)))) - -(defun flycheck-locate-config-file-ancestor-directories (filename _checker) - "Locate a configuration FILENAME in ancestor directories. - -If the current buffer has a file name, search FILENAME in the -directory of the current buffer and all ancestors thereof (see -`locate-dominating-file'). If the file is found, return its -absolute path. Otherwise return nil. - -_CHECKER is ignored." - (-when-let* ((basefile (buffer-file-name)) - (directory (locate-dominating-file basefile filename))) - (expand-file-name filename directory))) - -(defun flycheck-locate-config-file-home (filename _checker) - "Locate a configuration FILENAME in the home directory. - -Return the absolute path, if FILENAME exists in the user's home -directory, or nil otherwise." - (let ((path (expand-file-name filename "~"))) - (when (file-exists-p path) - path))) - -(seq-do (apply-partially #'custom-add-frequent-value - 'flycheck-locate-config-file-functions) - '(flycheck-locate-config-file-by-path - flycheck-locate-config-file-ancestor-directories - flycheck-locate-config-file-home)) - -(defun flycheck-register-option-var (var checkers) - "Register an option VAR with CHECKERS. - -VAR is an option symbol, and CHECKERS a syntax checker symbol or -a list thereof. Register VAR with all CHECKERS so that it -appears in the help output." - (when (symbolp checkers) - (setq checkers (list checkers))) - (dolist (checker checkers) - (cl-pushnew var (flycheck-checker-get checker 'option-vars)))) - -;;;###autoload -(defmacro flycheck-def-option-var (symbol init-value checkers docstring - &rest custom-args) - "Define SYMBOL as option variable with INIT-VALUE for CHECKER. - -SYMBOL is declared as customizable variable using `defcustom', to -provide an option for the given syntax CHECKERS (a checker or a -list of checkers). INIT-VALUE is the initial value of the -variable, and DOCSTRING is its docstring. CUSTOM-ARGS are -forwarded to `defcustom'. - -Use this together with the `option', `option-list' and -`option-flag' forms in the `:command' argument to -`flycheck-define-checker'." - (declare (indent 3) - (doc-string 4)) - `(progn - (defcustom ,symbol ,init-value - ,(concat docstring " - -This variable is an option for the following syntax checkers: - -" - (mapconcat (lambda (c) (format " - `%s'" c)) - (if (symbolp checkers) (list checkers) checkers) - "\n")) - :group 'flycheck-options - ,@custom-args) - (flycheck-register-option-var ',symbol ',checkers))) - -(defun flycheck-option-int (value) - "Convert an integral option VALUE to a string. - -If VALUE is nil, return nil. Otherwise return VALUE converted to -a string." - (and value (number-to-string value))) - -(defun flycheck-option-symbol (value) - "Convert a symbol option VALUE to string. - -If VALUE is nil return nil. Otherwise return VALUE converted to -a string." - (and value (symbol-name value))) - -(defun flycheck-option-comma-separated-list (value &optional separator filter) - "Convert VALUE into a list separated by SEPARATOR. - -SEPARATOR is a string to separate items in VALUE, defaulting to -\",\". FILTER is an optional function, which takes a single -argument and returns either a string or nil. - -If VALUE is a list, apply FILTER to each item in VALUE, remove -all nil items, and return a single string of all remaining items -separated by SEPARATOR. - -Otherwise, apply FILTER to VALUE and return the result. -SEPARATOR is ignored in this case." - (let ((filter (or filter #'identity)) - (separator (or separator ","))) - (if (listp value) - (-when-let (value (delq nil (seq-map filter value))) - (string-join value separator)) - (funcall filter value)))) - -(defmacro flycheck-def-args-var (symbol checkers &rest custom-args) - "Define SYMBOL as argument variable for CHECKERS. - -SYMBOL is declared as customizable, risky and buffer-local -variable using `defcustom' to provide an option for arbitrary -arguments for the given syntax CHECKERS (either a single checker -or a list of checkers). CUSTOM-ARGS is forwarded to `defcustom'. - -Use the `eval' form to splice this variable into the -`:command'." - (declare (indent 2)) - `(flycheck-def-option-var ,symbol nil ,checkers - "A list of additional command line arguments. - -The value of this variable is a list of strings with additional -command line arguments." - :risky t - :type '(repeat (string :tag "Argument")) - ,@custom-args)) - - -;;; Command syntax checkers as compile commands -(defun flycheck-checker-pattern-to-error-regexp (pattern) - "Convert PATTERN into an error regexp for compile.el. - -Return a list representing PATTERN, suitable as element in -`compilation-error-regexp-alist'." - (let* ((regexp (car pattern)) - (level (cdr pattern)) - (level-no (flycheck-error-level-compilation-level level))) - `(,regexp 1 (2 . 6) (3 . 7) ,level-no))) - -(defun flycheck-checker-compilation-error-regexp-alist (checker) - "Convert error patterns of CHECKER for use with compile.el. - -Return an alist of all error patterns of CHECKER, suitable for -use with `compilation-error-regexp-alist'." - (seq-map #'flycheck-checker-pattern-to-error-regexp - (flycheck-checker-get checker 'error-patterns))) - -(defun flycheck--substitute-shell-command-argument (arg checker) - "Substitute ARG for CHECKER. - -Like `flycheck-substitute-argument', except for source, -source-inplace, and source-original." - (if (memq arg '(source source-inplace source-original)) - (list buffer-file-name) - (flycheck-substitute-argument arg checker))) - -(defun flycheck--checker-substituted-shell-command-arguments (checker) - "Get the substituted arguments of a CHECKER to run as a shell command. - -Substitute each argument of CHECKER using -`flycheck-substitute-shell-command-argument'." - (apply #'append - (seq-map (lambda (arg) - (flycheck--substitute-shell-command-argument arg checker)) - (flycheck-checker-arguments checker)))) - -(defun flycheck-checker-shell-command (checker) - "Get a shell command for CHECKER. - -Perform substitution in the arguments of CHECKER, but with -`flycheck--substitute-shell-command-argument'. - -Return the command of CHECKER as single string, suitable for -shell execution." - ;; Note: Do NOT use `combine-and-quote-strings' here. Despite it's name it - ;; does not properly quote shell arguments, and actually breaks for special - ;; characters. See https://github.com/flycheck/flycheck/pull/522 - (let* ((args (flycheck--checker-substituted-shell-command-arguments checker)) - (program - (or (flycheck-find-checker-executable checker) - (user-error "Cannot find `%s' using `flycheck-executable-find'" - (flycheck-checker-executable checker)))) - (wrapped (flycheck--wrap-command program args)) - (abs-prog - ;; The executable path returned by `flycheck-command-wrapper-function' - ;; may not be absolute, so expand it here. See URL - ;; `https://github.com/flycheck/flycheck/issues/1461'. - (or (executable-find (car wrapped)) - (user-error "Cannot find `%s' using `executable-find'" - (car wrapped)))) - (command (mapconcat #'shell-quote-argument - (cons abs-prog (cdr wrapped)) " "))) - (if (flycheck-checker-get checker 'standard-input) - ;; If the syntax checker expects the source from standard input add an - ;; appropriate shell redirection - (concat command " < " (shell-quote-argument (buffer-file-name))) - command))) - -(defun flycheck-compile-name (_name) - "Get a name for a Flycheck compilation buffer. - -_NAME is ignored." - (format "*Flycheck %s*" (buffer-file-name))) - -(defun flycheck-compile (checker) - "Run CHECKER via `compile'. - -CHECKER must be a valid syntax checker. Interactively, prompt -for a syntax checker to run. - -Instead of highlighting errors in the buffer, this command pops -up a separate buffer with the entire output of the syntax checker -tool, just like `compile' (\\[compile])." - (interactive - (let ((default (flycheck-get-checker-for-buffer))) - (list (flycheck-read-checker "Run syntax checker as compile command: " - (when (flycheck-checker-get default 'command) - default) - 'command)))) - (unless (flycheck-valid-checker-p checker) - (user-error "%S is not a valid syntax checker" checker)) - (unless (buffer-file-name) - (user-error "Cannot compile a buffer without a backing file")) - (unless (flycheck-may-use-checker checker) - (user-error "Cannot use syntax checker %S in this buffer" checker)) - (unless (flycheck-checker-executable checker) - (user-error "Cannot run checker %S as shell command" checker)) - (save-some-buffers) - (let* ((default-directory (flycheck-compute-working-directory checker)) - (command (flycheck-checker-shell-command checker)) - (buffer (compilation-start command nil #'flycheck-compile-name))) - (with-current-buffer buffer - (setq-local compilation-error-regexp-alist - (flycheck-checker-compilation-error-regexp-alist checker))))) - - -;;; General error parsing for command checkers -(defun flycheck-parse-output (output checker buffer) - "Parse OUTPUT from CHECKER in BUFFER. - -OUTPUT is a string with the output from the checker symbol -CHECKER. BUFFER is the buffer which was checked. - -Return the errors parsed with the error patterns of CHECKER." - (funcall (flycheck-checker-get checker 'error-parser) output checker buffer)) - -(defun flycheck-fix-error-filename (err buffer-files cwd) - "Fix the file name of ERR from BUFFER-FILES. - -Resolves error file names relative to CWD directory. - -Make the file name of ERR absolute. If the absolute file name of -ERR is in BUFFER-FILES, replace it with the value of variable -`buffer-file-name'." - (flycheck-error-with-buffer err - (-when-let (filename (flycheck-error-filename err)) - (when (seq-some (apply-partially #'flycheck-same-files-p - (expand-file-name filename cwd)) - buffer-files) - (setf (flycheck-error-filename err) buffer-file-name) - (when (and buffer-file-name (flycheck-error-message err)) - (setf (flycheck-error-message err) - (replace-regexp-in-string - (regexp-quote filename) buffer-file-name - (flycheck-error-message err) 'fixed-case 'literal)))))) - err) - - -;;; Error parsers for command syntax checkers -(defun flycheck-parse-xml-region (beg end) - "Parse the xml region between BEG and END. - -Wrapper around `xml-parse-region' which transforms the return -value of this function into one compatible to -`libxml-parse-xml-region' by simply returning the first element -from the node list." - (ignore-errors (car (xml-parse-region beg end)))) - -(defun flycheck-parse-xml-region-with-fallback (beg end) - "Parse the xml region between BEG and END. - -Try parsing with libxml first; if that fails, revert to -`flycheck-parse-xml-region'. Failures can be caused by incorrect -XML (see URL `https://github.com/flycheck/flycheck/issues/1298'), -or on Windows by a missing libxml DLL with a libxml-enabled Emacs -\(see URL `https://github.com/flycheck/flycheck/issues/1330')." - ;; FIXME use `libxml-available-p' when it gets implemented. - (or (and (fboundp 'libxml-parse-xml-region) - (libxml-parse-xml-region beg end)) - (flycheck-parse-xml-region beg end))) - -(defvar flycheck-xml-parser 'flycheck-parse-xml-region-with-fallback - "Function used to parse an xml string from a region. - -The default uses libxml if available, and falls back to -`flycheck-parse-xml-region' otherwise.") - -(defun flycheck-parse-xml-string (xml) - "Parse an XML string. - -Return the document tree parsed from XML in the form `(ROOT ATTRS -BODY...)'. ROOT is a symbol identifying the name of the root -element. ATTRS is an alist of the attributes of the root node. -BODY is zero or more body elements, either as strings (in case of -text nodes) or as XML nodes, in the same for as the root node." - (with-temp-buffer - (insert xml) - (funcall flycheck-xml-parser (point-min) (point-max)))) - -(defun flycheck-parse-checkstyle (output checker buffer) - "Parse Checkstyle errors from OUTPUT. - -Parse Checkstyle-like XML output. Use this error parser for -checkers that have an option to output errors in this format. - -CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `http://checkstyle.sourceforge.net/' for information -about Checkstyle." - (pcase (flycheck-parse-xml-string output) - (`(checkstyle ,_ . ,file-nodes) - (let (errors) - (dolist (node file-nodes) - (pcase node - (`(file ,file-attrs . ,error-nodes) - (dolist (node error-nodes) - (pcase node - (`(error ,error-attrs . ,_) - (let-alist error-attrs - (push (flycheck-error-new-at - (flycheck-string-to-number-safe .line) - (flycheck-string-to-number-safe .column) - (pcase .severity - (`"error" 'error) - (`"warning" 'warning) - (`"info" 'info) - ;; Default to error for unknown .severity - (_ 'error)) - .message - :checker checker :id .source - :buffer buffer - :filename (cdr (assq 'name file-attrs))) - errors)))))))) - (nreverse errors))))) - -(defun flycheck-parse-cppcheck (output checker buffer) - "Parse Cppcheck errors from OUTPUT. - -Parse Cppcheck XML v2 output. - -CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `http://cppcheck.sourceforge.net/' for more information -about Cppcheck." - (pcase (flycheck-parse-xml-string output) - (`(results ,_ . ,body) - (let (errors) - (dolist (node body) - (pcase node - (`(errors ,_ . ,error-nodes) - (dolist (node error-nodes) - (pcase node - (`(error ,error-attrs . ,loc-nodes) - (let ((id (cdr (assq 'id error-attrs))) - (message (cdr (assq 'verbose error-attrs))) - (level (pcase (cdr (assq 'severity error-attrs)) - (`"error" 'error) - (`"style" 'info) - (`"information" 'info) - (_ 'warning)))) - (dolist (node loc-nodes) - (pcase node - (`(location ,loc-attrs . ,_) - (let-alist loc-attrs - (push (flycheck-error-new-at - (flycheck-string-to-number-safe .line) - nil - level - ;; cppcheck return newline characters as "\012" - (replace-regexp-in-string "\\\\012" "\n" - message) - :id id - :checker checker - :buffer buffer - :filename .file) - errors)))))))))))) - (nreverse errors))))) - -(defun flycheck-parse-phpmd (output checker buffer) - "Parse phpmd errors from OUTPUT. - -CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `http://phpmd.org/' for more information about phpmd." - (pcase (flycheck-parse-xml-string output) - (`(pmd ,_ . ,body) - (let (errors) - (dolist (node body) - (pcase node - (`(file ,file-attrs . ,violation-nodes) - (let ((filename (cdr (assq 'name file-attrs)))) - (dolist (node violation-nodes) - (pcase node - (`(violation ,vio-attrs ,(and message (pred stringp))) - (let-alist vio-attrs - (push - (flycheck-error-new-at - (flycheck-string-to-number-safe .beginline) - nil - 'warning (string-trim message) - ;; Ignore .endline (phpmd marks giant spans as errors) - ;; :end-line (flycheck-string-to-number-safe .endline) - :id .rule - :checker checker - :buffer buffer - :filename filename) - errors))))))))) - (nreverse errors))))) - -(defun flycheck-parse-reek (output checker buffer) - "Parse Reek warnings from JSON OUTPUT. - -CHECKER and BUFFER denote the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `https://github.com/troessner/reek' for more information -about Reek." - (let ((errors nil)) - (dolist (message (car (flycheck-parse-json output))) - (let-alist message - (dolist (line (delete-dups .lines)) - (push - (flycheck-error-new-at - line - nil - 'warning (concat .context " " .message) - :id .smell_type - :checker checker - :buffer buffer - :filename .source) - errors)))) - (nreverse errors))) - -(defun flycheck-parse-go-staticcheck (output checker buffer) - "Parse staticheck warnings from JSON OUTPUT. - -CHECKER and BUFFER denote the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `https://staticcheck.io/docs/formatters' for more -information about staticheck." - (let ((errors nil)) - (dolist (msg (flycheck-parse-json output)) - (let-alist msg - (push - (flycheck-error-new-at - .location.line - .location.column - (pcase .severity - (`"error" 'error) - (`"warning" 'warning) - (`"ignored" 'info) - ;; Default to warning for unknown .severity - (_ 'warning)) - .message - :id .code - :checker checker - :buffer buffer - :filename .location.file) - errors))) - (nreverse errors))) - -(defun flycheck-parse-tslint (output checker buffer) - "Parse TSLint errors from JSON OUTPUT. - -CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `https://palantir.github.io/tslint/' for more information -about TSLint." - (seq-map (lambda (message) - (let-alist message - (flycheck-error-new-at - (+ 1 .startPosition.line) - (+ 1 .startPosition.character) - (pcase .ruleSeverity - ("ERROR" 'error) - ("WARNING" 'warning) - (_ 'warning)) - .failure - :id .ruleName - :checker checker - :buffer buffer - :filename .name - :end-line (+ 1 .endPosition.line) - :end-column (+ 1 .endPosition.character)))) - (car (flycheck-parse-json output)))) - -(defun flycheck-parse-rust-collect-spans (span) - "Return a list of spans contained in a SPAN object." - (let ((spans)) - (let-alist span - ;; With macro expansion errors, some spans will point to phony file names - ;; to indicate an error inside the std rust lib. We skip these spans as - ;; they won't appear in flycheck anyway. - (unless (string= .file_name "") - (push span spans)) - - ;; Macro expansion errors will have a span in the 'expansion' field, so we - ;; recursively collect it. - (if .expansion.span - (append (flycheck-parse-rust-collect-spans .expansion.span) - spans) - spans)))) - -(defun flycheck-parse-rustc-diagnostic (diagnostic checker buffer) - "Turn a rustc DIAGNOSTIC into a `flycheck-error'. - -CHECKER and BUFFER denote the CHECKER that returned DIAGNOSTIC -and the BUFFER that was checked respectively. - -DIAGNOSTIC should be a parsed JSON object describing a rustc -diagnostic, following the format described there: - -https://github.com/rust-lang/rust/blob/master/src/librustc_errors/json.rs#L154" - (let ((error-message) - (error-level) - (error-code) - (primary-filename) - (primary-line) - (primary-column) - (primary-end-line) - (primary-end-column) - (group (make-symbol "group")) - (spans) - (children) - (errors)) - ;; The diagnostic format is described in the link above. The gist of it is - ;; that a diagnostic can have several causes in the source text; these - ;; causes are represented by spans. The diagnostic has a message and a - ;; level (error, warning), while the spans have a filename, line, column, - ;; and an optional label. The primary span points to the root cause of the - ;; error in the source text, while non-primary spans point to related - ;; causes. Spans may have an 'expansion' field for macro expansion errors; - ;; these expansion fields will contain another span (and so on). In - ;; addition, a diagnostic can also have children diagnostics that are used - ;; to provide additional information through their message field, but do not - ;; seem to contain any spans (yet). - ;; - ;; We first gather spans in order to turn every span into a flycheck error - ;; object, that we collect into the `errors' list. - - ;; Nested `let-alist' cause compilation warnings, hence we `setq' all - ;; these values here first to avoid nesting. - (let-alist diagnostic - (setq error-message .message - error-level (pcase .level - (`"error" 'error) - (`"warning" 'warning) - (`"note" 'info) - (_ 'error)) - ;; The 'code' field of the diagnostic contains the actual error - ;; code and an optional explanation that we ignore - error-code .code.code - ;; Collect all spans recursively - spans (seq-mapcat #'flycheck-parse-rust-collect-spans .spans) - children .children)) - - ;; Turn each span into a flycheck error - (dolist (span spans) - (let-alist span - ;; Children may not have filename/line/column information, so we use - ;; those from the primary span - (when .is_primary - (setq primary-filename .file_name - primary-line .line_start - primary-column .column_start - primary-end-line .line_end - primary-end-column .column_end)) - (push - (flycheck-error-new-at - .line_start - .column_start - ;; Non-primary spans are used for notes - (if .is_primary error-level 'info) - (if .is_primary - ;; Primary spans may have labels with additional information - (concat error-message (when .label - (format " (%s)" .label))) - ;; If the label is empty, fallback on the error message, - ;; otherwise we won't be able to display anything - (or .label error-message)) - :id error-code - :checker checker - :buffer buffer - :filename .file_name - :group group - :end-line .line_end - :end-column .column_end) - errors))) - - ;; Then we turn children messages into flycheck errors pointing to the - ;; location of the primary span. - (dolist (child children) - (let ((message (let-alist child .message))) - (let-alist (car (let-alist child .spans)) - (push - (flycheck-error-new-at - ;; Use the line/column from the first span if there is one, or - ;; fallback to the line/column information from the primary span of - ;; the diagnostic. - (or .line_start primary-line) - (or .column_start primary-column) - 'info - ;; Messages from `cargo clippy' may suggest replacement code. In - ;; these cases, the `message' field itself is an unhelpful `try' or - ;; `change this to'. We add the `suggested_replacement' field in - ;; these cases. - (if .suggested_replacement - (format "%s: `%s`" message .suggested_replacement) - message) - :id error-code - :checker checker - :buffer buffer - :filename primary-filename - :group group - :end-line (or .line_end primary-end-line) - :end-column (or .column_end primary-end-column)) - errors)))) - - ;; If there are no spans, the error is not associated with a specific - ;; file but with the project as a whole. We still need to report it to - ;; the user by emitting a corresponding flycheck-error object. - ;; Check whether the code is non-nil because Rust≥1.44 includes the - ;; warning count upon completion. - (when (and error-code (not spans)) - (push (flycheck-error-new-at - ;; We have no specific position to attach the error to, so - ;; let's use the top of the file. - 1 1 - error-level - error-message - :id error-code - :checker checker - :buffer buffer - :group group) - errors)) - (nreverse errors))) - -(defconst flycheck--json-parser - (if (and (functionp 'json-parse-buffer) - ;; json-parse-buffer only supports keyword arguments in Emacs 27+ - (>= emacs-major-version 27)) - (lambda () - (json-parse-buffer - :object-type 'alist :array-type 'list - :null-object nil :false-object nil)) - #'json-read) - "Function to use to parse JSON strings.") - -(defun flycheck-parse-json (output) - "Return parsed JSON data from OUTPUT. - -OUTPUT is a string that contains JSON data. Each line of OUTPUT -may be either plain text, a JSON array (starting with `['), or a -JSON object (starting with `{'). - -This function ignores the plain text lines, parses the JSON -lines, and returns the parsed JSON lines in a list." - (let ((objects nil) - (json-array-type 'list) - (json-false nil)) - (with-temp-buffer - (insert output) - (goto-char (point-min)) - (while (not (eobp)) - (when (memq (char-after) '(?\{ ?\[)) - (push (funcall flycheck--json-parser) objects)) - (forward-line))) - (nreverse objects))) - -(defun flycheck-parse-rustc (output checker buffer) - "Parse rustc errors from OUTPUT and return a list of `flycheck-error'. - -CHECKER and BUFFER denote the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -The expected format for OUTPUT is a mix of plain text lines and -JSON lines. This function ignores the plain text lines and -parses only JSON lines. Each JSON line is expected to be a JSON -object that corresponds to a diagnostic from the compiler. The -expected diagnostic format is described there: - -https://github.com/rust-lang/rust/blob/master/src/libsyntax/json.rs#L67-L139" - (seq-mapcat (lambda (msg) - (flycheck-parse-rustc-diagnostic msg checker buffer)) - (flycheck-parse-json output))) - -(defun flycheck-parse-cargo-rustc (output checker buffer) - "Parse Cargo errors from OUTPUT and return a list of `flycheck-error'. - -CHECKER and BUFFER denote the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -The expected format for OUTPUT is a mix of plain text lines and -JSON lines. This function ignores the plain text lines and -parses only JSON lines. Each JSON line is expected to be a JSON -object that represents a message from Cargo. The format of -messages emitted by Cargo is described in cargo's -machine_message.rs at URL `https://git.io/vh24R'." - (let ((errors)) - (dolist (msg (flycheck-parse-json output)) - (let-alist msg - ;; Errors and warnings from rustc are wrapped by cargo, so we filter and - ;; unwrap them, and delegate the actual construction of `flycheck-error' - ;; objects to `flycheck-parse-rustc-diagnostic'. - ;; We put the error record with nil code since flycheck regards - ;; the case of nonzero return code without any error report - ;; as abnormal result. - (when (string= .reason "compiler-message") - (push (flycheck-parse-rustc-diagnostic .message checker buffer) - errors)))) - (apply #'nconc errors))) - -;; Some checkers output ANSI terminal colors, which don't match up -;; with :error-patterns, so we strip those color codes from the output -;; here before passing it along to the default behavior. This is -;; originally only used in the rebar3 checker, but the systemd checker -;; now also makes use of it. -;; -;; The relevant discussion can be found at -;; https://github.com/flycheck/flycheck/pull/1144 -(defun flycheck-parse-with-patterns-without-color (output checker buffer) - "Strip color codes from OUTPUT before passing it to the default behavior. - -CHECKER and BUFFER are passed along as well." - (flycheck-parse-with-patterns - (and (fboundp 'ansi-color-filter-apply) (ansi-color-filter-apply output)) - checker buffer)) - - -;;; Error parsing with regular expressions -(defun flycheck-get-regexp (patterns) - "Create a single regular expression from PATTERNS." - (rx-to-string `(or ,@(seq-map (lambda (p) (list 'regexp (car p))) patterns)) - 'no-group)) - -(defun flycheck-tokenize-output-with-patterns (output patterns) - "Tokenize OUTPUT with PATTERNS. - -Split the output into error tokens, using all regular expressions -from the error PATTERNS. An error token is simply a string -containing a single error from OUTPUT. Such a token can then be -parsed into a structured error by applying the PATTERNS again, -see `flycheck-parse-errors-with-patterns'. - -Return a list of error tokens." - (let ((regexp (flycheck-get-regexp patterns)) - (last-match 0) - errors) - (while (string-match regexp output last-match) - (push (match-string 0 output) errors) - (setq last-match (match-end 0))) - (reverse errors))) - -(defun flycheck-try-parse-error-with-pattern (err pattern checker) - "Try to parse a single ERR with a PATTERN for CHECKER. - -Return the parsed error if PATTERN matched ERR, or nil -otherwise. - -`end-line' defaults to the value of `line' when `end-column' is -set, since checkers often omit redundant end lines (as in -::-)." - (let ((regexp (car pattern)) - (level (cdr pattern))) - (when (string-match regexp err) - (let ((filename (match-string 1 err)) - (line (flycheck-string-to-number-safe (match-string 2 err))) - (column (flycheck-string-to-number-safe (match-string 3 err))) - (message (match-string 4 err)) - (id (match-string 5 err)) - (end-line (flycheck-string-to-number-safe (match-string 6 err))) - (end-column (flycheck-string-to-number-safe (match-string 7 err)))) - (flycheck-error-new-at - line - column - level - (unless (string-empty-p message) message) - :id (unless (string-empty-p id) id) - :checker checker - :filename (if (or (null filename) (string-empty-p filename)) - (buffer-file-name) - filename) - :end-line (or end-line (and end-column line)) - :end-column end-column))))) - -(defun flycheck-parse-error-with-patterns (err patterns checker) - "Parse a single ERR with error PATTERNS for CHECKER. - -Apply each pattern in PATTERNS to ERR, in the given order, and -return the first parsed error." - ;; Try to parse patterns in the order of declaration to make sure that the - ;; first match wins. - (let (parsed-error) - (while (and patterns - (not (setq parsed-error - (flycheck-try-parse-error-with-pattern - err (car patterns) checker)))) - (setq patterns (cdr patterns))) - parsed-error)) - -(defun flycheck-parse-with-patterns (output checker buffer) - "Parse OUTPUT from CHECKER with error patterns. - -Uses the error patterns of CHECKER to tokenize the output and -tries to parse each error token with all patterns, in the order -of declaration. Hence an error is never matched twice by two -different patterns. The pattern declared first always wins. - -_BUFFER is ignored. - -Return a list of parsed errors and warnings (as `flycheck-error' -objects)." - (with-current-buffer buffer - (let ((patterns (flycheck-checker-get checker 'error-patterns))) - (seq-map (lambda (err) - (flycheck-parse-error-with-patterns err patterns checker)) - (flycheck-tokenize-output-with-patterns output patterns))))) - - -;;; Convenience definition of command-syntax checkers - -;; This macro is autoloaded to prevent `with-eval-after-load' from expanding its -;; arguments. See https://github.com/flycheck/flycheck/issues/1398. -;;;###autoload -(defmacro flycheck-define-checker (symbol docstring &rest properties) - "Define SYMBOL as command syntax checker with DOCSTRING and PROPERTIES. - -Like `flycheck-define-command-checker', but PROPERTIES must not -be quoted. Also, implicitly define the executable variable for -SYMBOL with `flycheck-def-executable-var'." - (declare (indent 1) - (doc-string 2)) - (let ((command (plist-get properties :command)) - (parser (plist-get properties :error-parser)) - (filter (plist-get properties :error-filter)) - (explainer (plist-get properties :error-explainer)) - (predicate (plist-get properties :predicate)) - (enabled-fn (plist-get properties :enabled)) - (verify-fn (plist-get properties :verify))) - - `(progn - (flycheck-def-executable-var ,symbol ,(car command)) - - (flycheck-define-command-checker ',symbol - ,docstring - :command ',command - ,@(when parser - `(:error-parser #',parser)) - :error-patterns ',(plist-get properties :error-patterns) - ,@(when filter - `(:error-filter #',filter)) - ,@(when explainer - `(:error-explainer #',explainer)) - :modes ',(plist-get properties :modes) - ,@(when predicate - `(:predicate #',predicate)) - :next-checkers ',(plist-get properties :next-checkers) - ,@(when enabled-fn - `(:enabled #',enabled-fn)) - ,@(when verify-fn - `(:verify #',verify-fn)) - :standard-input ',(plist-get properties :standard-input) - :working-directory ',(plist-get properties :working-directory))))) - - -;;; Built-in checkers -(flycheck-def-args-var flycheck-gnat-args ada-gnat - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-gnat-include-path nil ada-gnat - "A list of include directories for GNAT. - -The value of this variable is a list of strings, where each -string is a directory to add to the include path of gcc. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Include directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-gnat-language-standard "2012" ada-gnat - "The language standard to use in GNAT. - -The value of this variable is either a string denoting a language -standard, or nil, to use the default standard. When non-nil, pass -the language standard via the `-std' option." - :type '(choice (const :tag "Default standard" nil) - (string :tag "Language standard")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-gnat-warnings - '("wa") ada-gnat - "A list of additional Ada warnings to enable in GNAT. - -The value of this variable is a list of strings, where each -string is the name of a warning category to enable. By default, -most optional warnings are recommended, as in `-gnata'. - -Refer to Info Node `(gnat_ugn_unw)Warning Message Control' for -more information about GNAT warnings." - :type '(repeat :tag "Warnings" (string :tag "Warning name")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.20")) - -(flycheck-define-checker ada-gnat - "An Ada syntax checker using GNAT. - -Uses the GNAT compiler from GCC. See URL -`https://www.adacore.com/community/'." - :command ("gnatmake" - "-c" ; Just compile, don't bind - "-f" ; Force re-compilation - "-u" ; Compile the main file only - "-gnatf" ; Full error information - "-gnatef" ; Full source file name - "-D" temporary-directory - (option-list "-gnat" flycheck-gnat-warnings concat) - (option-list "-I" flycheck-gnat-include-path concat) - (option "-gnat" flycheck-gnat-language-standard concat) - (eval flycheck-gnat-args) - source) - :error-patterns - ((error line-start - (message "In file included from") " " (file-name) ":" line ":" - column ":" - line-end) - (info line-start (file-name) ":" line ":" column - ": note: " (message) line-end) - (warning line-start (file-name) ":" line ":" column - ": warning: " (message) line-end) - ;; no specific error prefix in Ada - (error line-start (file-name) ":" line ":" column - ": " (message) line-end)) - :modes ada-mode) - -(flycheck-define-checker asciidoc - "A AsciiDoc syntax checker using the AsciiDoc compiler. - -See URL `http://www.methods.co.nz/asciidoc'." - :command ("asciidoc" "-o" null-device "-") - :standard-input t - :error-patterns - ((error line-start - "asciidoc: ERROR: : Line " line ": " (message) - line-end) - (warning line-start - "asciidoc: WARNING: : Line " line ": " (message) - line-end) - (info line-start - "asciidoc: DEPRECATED: : Line " line ": " (message) - line-end)) - :modes adoc-mode) - -(flycheck-define-checker asciidoctor - "An AsciiDoc syntax checker using the Asciidoctor compiler. - -See URL `http://asciidoctor.org'." - :command ("asciidoctor" "-o" null-device "-") - :standard-input t - :error-patterns - ((error line-start - "asciidoctor: ERROR: : Line " line ": " (message) - line-end) - (warning line-start - "asciidoctor: WARNING: : Line " line ": " (message) - line-end)) - :modes adoc-mode) - -(defun flycheck-awk-gawk-fix-message (err) - "Remove the repeated file-name/line from the error message of ERR." - (setf (flycheck-error-message err) - (replace-regexp-in-string - (rx line-start - (group (zero-or-more (any " " "\t"))) - (group (zero-or-more nonl) "\n") - (backref 1)) - "\\2" - (replace-regexp-in-string - (rx "\ngawk: " (zero-or-more (not (any " "))) ":") - "\n" - (flycheck-error-message err)))) - err) - -(defun flycheck-awk-gawk-error-filter (errors) - "Remove repeated file-name/line from ERRORS." - (seq-do #'flycheck-awk-gawk-fix-message errors) - errors) - -(flycheck-define-checker awk-gawk - "GNU awk's built-in --lint checker." - :command ("gawk" - ;; Avoid code execution. See https://github.com/w0rp/ale/pull/1411 - "--source" "'BEGIN{exit} END{exit 1}'" - "-f" source - "--lint" - "/dev/null") - :standard-input nil - :error-patterns - ((warning line-start - "gawk: " - (file-name) ":" line ":" (optional column ":") - (message (one-or-more not-newline) - (optional "\n" - (one-or-more not-newline) - " ^ " - (one-or-more not-newline))) - line-end)) - :error-filter flycheck-awk-gawk-error-filter - :modes awk-mode) - -(flycheck-define-checker bazel-buildifier - "An Bazel checker using the buildifier. - -See URL `https://github.com/bazelbuild/buildtools/blob/master/buildifier'." - :command ("buildifier" "-lint=warn") - :standard-input t - :error-patterns - ((error line-start - ":" line ":" column ": " (message) - line-end) - (warning line-start - ":" line ": " (id (one-or-more (in word "-"))) ": " (message) - line-end)) - :modes bazel-mode) - -(flycheck-def-args-var flycheck-clang-args c/c++-clang - :package-version '(flycheck . "0.22")) - -(flycheck-def-option-var flycheck-clang-blocks nil c/c++-clang - "Enable blocks in Clang. - -When non-nil, enable blocks in Clang with `-fblocks'. See URL -`http://clang.llvm.org/docs/BlockLanguageSpec.html' for more -information about blocks." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-clang-definitions nil c/c++-clang - "Additional preprocessor definitions for Clang. - -The value of this variable is a list of strings, where each -string is an additional definition to pass to Clang, via the `-D' -option." - :type '(repeat (string :tag "Definition")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.15")) - -(flycheck-def-option-var flycheck-clang-include-path nil c/c++-clang - "A list of include directories for Clang. - -The value of this variable is a list of strings, where each -string is a directory to add to the include path of Clang. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Include directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.14")) - -(flycheck-def-option-var flycheck-clang-includes nil c/c++-clang - "A list of additional include files for Clang. - -The value of this variable is a list of strings, where each -string is a file to include before syntax checking. Relative -paths are relative to the file being checked." - :type '(repeat (file :tag "Include file")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.15")) - -(flycheck-def-option-var flycheck-clang-language-standard nil c/c++-clang - "The language standard to use in Clang. - -The value of this variable is either a string denoting a language -standard, or nil, to use the default standard. When non-nil, -pass the language standard via the `-std' option." - :type '(choice (const :tag "Default standard" nil) - (string :tag "Language standard")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "0.15")) -(make-variable-buffer-local 'flycheck-clang-language-standard) - -(flycheck-def-option-var flycheck-clang-ms-extensions nil c/c++-clang - "Whether to enable Microsoft extensions to C/C++ in Clang. - -When non-nil, enable Microsoft extensions to C/C++ via -`-fms-extensions'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.16")) - -(flycheck-def-option-var flycheck-clang-no-exceptions nil c/c++-clang - "Whether to disable exceptions in Clang. - -When non-nil, disable exceptions for syntax checks, via -`-fno-exceptions'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-clang-no-rtti nil c/c++-clang - "Whether to disable RTTI in Clang. - -When non-nil, disable RTTI for syntax checks, via `-fno-rtti'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.15")) - -(flycheck-def-option-var flycheck-clang-pedantic nil c/c++-clang - "Whether to warn about language extensions in Clang. - -For ISO C, follows the version specified by any -std option used. -When non-nil, disable non-ISO extensions to C/C++ via -`-pedantic'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.23")) - -(flycheck-def-option-var flycheck-clang-pedantic-errors nil c/c++-clang - "Whether to error on language extensions in Clang. - -For ISO C, follows the version specified by any -std option used. -When non-nil, disable non-ISO extensions to C/C++ via -`-pedantic-errors'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.23")) - -(flycheck-def-option-var flycheck-clang-standard-library nil c/c++-clang - "The standard library to use for Clang. - -The value of this variable is the name of a standard library as -string, or nil to use the default standard library. - -Refer to the Clang manual at URL -`http://clang.llvm.org/docs/UsersManual.html' for more -information about the standard library." - :type '(choice (const :tag "Default standard library" nil) - (const "libc++") - (const :tag "GNU libstdc++" "libstdc++") - (string :tag "Library name")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "0.15")) - -(flycheck-def-option-var flycheck-clang-warnings '("all" "extra") c/c++-clang - "A list of additional warnings to enable in Clang. - -The value of this variable is a list of strings, where each string -is the name of a warning category to enable. By default, all -recommended warnings and some extra warnings are enabled (as by -`-Wall' and `-Wextra' respectively). - -Refer to the Clang manual at URL -`http://clang.llvm.org/docs/UsersManual.html' for more -information about warnings." - :type '(choice (const :tag "No additional warnings" nil) - (repeat :tag "Additional warnings" - (string :tag "Warning name"))) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.14")) - -(defun flycheck-c/c++-quoted-include-directory () - "Get the directory for quoted includes. - -C/C++ compilers typically look up includes with quotation marks -in the directory of the file being compiled. However, since -Flycheck uses temporary copies for syntax checking, it needs to -explicitly determine the directory for quoted includes. - -This function determines the directory by looking at function -`buffer-file-name', or if that is nil, at `default-directory'." - (-if-let (fn (buffer-file-name)) - (file-name-directory fn) - ;; If the buffer has no file name, fall back to its default directory - default-directory)) - -(flycheck-define-checker c/c++-clang - "A C/C++ syntax checker using Clang. - -See URL `http://clang.llvm.org/'." - :command ("clang" - "-fsyntax-only" - "-fno-color-diagnostics" ; Do not include color codes in output - "-fno-caret-diagnostics" ; Do not visually indicate the source - ; location - "-fno-diagnostics-show-option" ; Do not show the corresponding - ; warning group - "-iquote" (eval (flycheck-c/c++-quoted-include-directory)) - (option "-std=" flycheck-clang-language-standard concat) - (option-flag "-pedantic" flycheck-clang-pedantic) - (option-flag "-pedantic-errors" flycheck-clang-pedantic-errors) - (option "-stdlib=" flycheck-clang-standard-library concat) - (option-flag "-fms-extensions" flycheck-clang-ms-extensions) - (option-flag "-fno-exceptions" flycheck-clang-no-exceptions) - (option-flag "-fno-rtti" flycheck-clang-no-rtti) - (option-flag "-fblocks" flycheck-clang-blocks) - (option-list "-include" flycheck-clang-includes) - (option-list "-W" flycheck-clang-warnings concat) - (option-list "-D" flycheck-clang-definitions concat) - (option-list "-I" flycheck-clang-include-path) - (eval flycheck-clang-args) - "-x" (eval - (pcase major-mode - (`c++-mode "c++") - (`c-mode "c"))) - ;; Read from standard input - "-") - :standard-input t - :error-patterns - ((info line-start (or "" (file-name)) ":" line ":" column - ": note: " (optional (message)) line-end) - (warning line-start (or "" (file-name)) ":" line ":" column - ": warning: " (optional (message)) line-end) - (error line-start (or "" (file-name)) ":" line ":" column - ": " (or "fatal error" "error") ": " (optional (message)) line-end)) - :error-filter - (lambda (errors) - (let ((errors (flycheck-sanitize-errors errors))) - (dolist (err errors) - ;; Clang will output empty messages for #error/#warning pragmas without - ;; messages. We fill these empty errors with a dummy message to get - ;; them past our error filtering - (setf (flycheck-error-message err) - (or (flycheck-error-message err) "no message"))) - errors)) - :modes (c-mode c++-mode) - :next-checkers ((warning . c/c++-cppcheck))) - -(flycheck-def-args-var flycheck-gcc-args c/c++-gcc - :package-version '(flycheck . "0.22")) - -(flycheck-def-option-var flycheck-gcc-definitions nil c/c++-gcc - "Additional preprocessor definitions for GCC. - -The value of this variable is a list of strings, where each -string is an additional definition to pass to GCC, via the `-D' -option." - :type '(repeat (string :tag "Definition")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-gcc-include-path nil c/c++-gcc - "A list of include directories for GCC. - -The value of this variable is a list of strings, where each -string is a directory to add to the include path of gcc. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Include directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-gcc-includes nil c/c++-gcc - "A list of additional include files for GCC. - -The value of this variable is a list of strings, where each -string is a file to include before syntax checking. Relative -paths are relative to the file being checked." - :type '(repeat (file :tag "Include file")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-gcc-language-standard nil c/c++-gcc - "The language standard to use in GCC. - -The value of this variable is either a string denoting a language -standard, or nil, to use the default standard. When non-nil, -pass the language standard via the `-std' option." - :type '(choice (const :tag "Default standard" nil) - (string :tag "Language standard")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "0.20")) -(make-variable-buffer-local 'flycheck-gcc-language-standard) - -(flycheck-def-option-var flycheck-gcc-no-exceptions nil c/c++-gcc - "Whether to disable exceptions in GCC. - -When non-nil, disable exceptions for syntax checks, via -`-fno-exceptions'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-gcc-no-rtti nil c/c++-gcc - "Whether to disable RTTI in GCC. - -When non-nil, disable RTTI for syntax checks, via `-fno-rtti'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-gcc-openmp nil c/c++-gcc - "Whether to enable OpenMP in GCC. - -When non-nil, enable OpenMP for syntax checkers, via -`-fopenmp'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.21")) - -(flycheck-def-option-var flycheck-gcc-pedantic nil c/c++-gcc - "Whether to warn about language extensions in GCC. - -For ISO C, follows the version specified by any -std option used. -When non-nil, disable non-ISO extensions to C/C++ via -`-pedantic'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.23")) - -(flycheck-def-option-var flycheck-gcc-pedantic-errors nil c/c++-gcc - "Whether to error on language extensions in GCC. - -For ISO C, follows the version specified by any -std option used. -When non-nil, disable non-ISO extensions to C/C++ via -`-pedantic-errors'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.23")) - -(flycheck-def-option-var flycheck-gcc-warnings '("all" "extra") c/c++-gcc - "A list of additional warnings to enable in GCC. - -The value of this variable is a list of strings, where each string -is the name of a warning category to enable. By default, all -recommended warnings and some extra warnings are enabled (as by -`-Wall' and `-Wextra' respectively). - -Refer to the gcc manual at URL -`https://gcc.gnu.org/onlinedocs/gcc/' for more information about -warnings." - :type '(choice (const :tag "No additional warnings" nil) - (repeat :tag "Additional warnings" - (string :tag "Warning name"))) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.20")) - -(flycheck-define-checker c/c++-gcc - "A C/C++ syntax checker using GCC. - -Requires GCC 4.4 or newer. See URL `https://gcc.gnu.org/'." - :command ("gcc" - "-fshow-column" - "-iquote" (eval (flycheck-c/c++-quoted-include-directory)) - (option "-std=" flycheck-gcc-language-standard concat) - (option-flag "-pedantic" flycheck-gcc-pedantic) - (option-flag "-pedantic-errors" flycheck-gcc-pedantic-errors) - (option-flag "-fno-exceptions" flycheck-gcc-no-exceptions) - (option-flag "-fno-rtti" flycheck-gcc-no-rtti) - (option-flag "-fopenmp" flycheck-gcc-openmp) - (option-list "-include" flycheck-gcc-includes) - (option-list "-W" flycheck-gcc-warnings concat) - (option-list "-D" flycheck-gcc-definitions concat) - (option-list "-I" flycheck-gcc-include-path) - (eval flycheck-gcc-args) - "-x" (eval - (pcase major-mode - (`c++-mode "c++") - (`c-mode "c"))) - ;; GCC performs full checking only when actually compiling, so - ;; `-fsyntax-only' is not enough. Just let it generate assembly - ;; code. - "-S" "-o" null-device - ;; Read from standard input - "-") - :standard-input t - :error-patterns - ((info line-start (or "" (file-name)) - ":" line (optional ":" column) - ": note: " (message) line-end) - (warning line-start (or "" (file-name)) - ":" line (optional ":" column) - ": warning: " (message (one-or-more (not (any "\n[")))) - (optional "[" (id (one-or-more not-newline)) "]") line-end) - (error line-start (or "" (file-name)) - ":" line (optional ":" column) - ": " (or "fatal error" "error") ": " (message) line-end)) - :modes (c-mode c++-mode) - :next-checkers ((warning . c/c++-cppcheck))) - -(flycheck-def-option-var flycheck-cppcheck-checks '("style") c/c++-cppcheck - "Enabled checks for Cppcheck. - -The value of this variable is a list of strings, where each -string is the name of an additional check to enable. By default, -all coding style checks are enabled. - -See section \"Enable message\" in the Cppcheck manual at URL -`http://cppcheck.sourceforge.net/manual.pdf', and the -documentation of the `--enable' option for more information, -including a list of supported checks." - :type '(repeat :tag "Additional checks" - (string :tag "Check name")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.14")) - -(flycheck-def-option-var flycheck-cppcheck-standards nil c/c++-cppcheck - "The standards to use in cppcheck. - -The value of this variable is either a list of strings denoting -the standards to use, or nil to pass nothing to cppcheck. When -non-nil, pass the standards via one or more `--std=' options." - :type '(choice (const :tag "Default" nil) - (repeat :tag "Custom standards" - (string :tag "Standard name"))) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "28")) -(make-variable-buffer-local 'flycheck-cppcheck-standards) - -(flycheck-def-option-var flycheck-cppcheck-suppressions-file nil c/c++-cppcheck - "The suppressions file to use in cppcheck. - -The value of this variable is a file with the suppressions to -use, or nil to pass nothing to cppcheck. When non-nil, pass the -suppressions file via the `--suppressions-list=' option." - :type '(choice (const :tag "Default" nil) - (file :tag "Suppressions file")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "32")) -(make-variable-buffer-local 'flycheck-cppcheck-suppressions-file) - -(flycheck-def-option-var flycheck-cppcheck-suppressions nil c/c++-cppcheck - "The suppressions to use in cppcheck. - -The value of this variable is either a list of strings denoting -the suppressions to use, or nil to pass nothing to cppcheck. -When non-nil, pass the suppressions via one or more `--suppress=' -options." - :type '(choice (const :tag "Default" nil) - (repeat :tag "Additional suppressions" - (string :tag "Suppression"))) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "28")) - -(flycheck-def-option-var flycheck-cppcheck-inconclusive nil c/c++-cppcheck - "Whether to enable Cppcheck inconclusive checks. - -When non-nil, enable Cppcheck inconclusive checks. This allows Cppcheck to -report warnings it's not certain of, but it may result in false positives. - -This will have no effect when using Cppcheck 1.53 and older." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.19")) - -(flycheck-def-option-var flycheck-cppcheck-include-path nil c/c++-cppcheck - "A list of include directories for cppcheck. - -The value of this variable is a list of strings, where each -string is a directory to add to the include path of cppcheck. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Include directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.24")) - -(flycheck-define-checker c/c++-cppcheck - "A C/C++ checker using cppcheck. - -See URL `http://cppcheck.sourceforge.net/'." - :command ("cppcheck" "--quiet" "--xml-version=2" "--inline-suppr" - (option "--enable=" flycheck-cppcheck-checks concat - flycheck-option-comma-separated-list) - (option-flag "--inconclusive" flycheck-cppcheck-inconclusive) - (option-list "-I" flycheck-cppcheck-include-path) - (option-list "--std=" flycheck-cppcheck-standards concat) - (option-list "--suppress=" flycheck-cppcheck-suppressions concat) - (option "--suppressions-list=" - flycheck-cppcheck-suppressions-file concat) - "-x" (eval - (pcase major-mode - (`c++-mode "c++") - (`c-mode "c"))) - source) - :error-parser flycheck-parse-cppcheck - :modes (c-mode c++-mode)) - -(flycheck-define-checker cfengine - "A CFEngine syntax checker using cf-promises. - -See URL `https://cfengine.com/'." - :command ("cf-promises" "-Wall" "-f" - ;; We must stay in the same directory to resolve @include - source-inplace) - :error-patterns - ((warning line-start (file-name) ":" line ":" column - ": warning: " (message) line-end) - (error line-start (file-name) ":" line ":" column - ": error: " (message) line-end)) - :modes (cfengine-mode cfengine3-mode)) - -(flycheck-def-option-var flycheck-foodcritic-tags nil chef-foodcritic - "A list of tags to select for Foodcritic. - -The value of this variable is a list of strings where each string -is a tag expression describing Foodcritic rules to enable or -disable, via the `--tags' option. To disable a tag, prefix it -with `~'." - :type '(repeat :tag "Tags" (string :tag "Tag expression")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.23")) - -(flycheck-define-checker chef-foodcritic - "A Chef cookbooks syntax checker using Foodcritic. - -See URL `http://www.foodcritic.io'." - ;; Use `source-inplace' to allow resource discovery with relative paths. - ;; foodcritic interprets these as relative to the source file, so we need to - ;; stay within the source tree. See - ;; https://github.com/flycheck/flycheck/pull/556 - :command ("foodcritic" - (option-list "--tags" flycheck-foodcritic-tags) - source-inplace) - :error-patterns - ((error line-start (id (one-or-more alnum)) ": " - (message) ": " (file-name) ":" line line-end)) - :modes (enh-ruby-mode ruby-mode) - :predicate - (lambda () - (let ((parent-dir (file-name-directory - (directory-file-name - (expand-file-name default-directory))))) - (or - ;; Chef CookBook - ;; http://docs.opscode.com/chef/knife.html#id38 - (locate-dominating-file parent-dir "recipes") - ;; Knife Solo - ;; http://matschaffer.github.io/knife-solo/#label-Init+command - (locate-dominating-file parent-dir "cookbooks"))))) - -(flycheck-define-checker coffee - "A CoffeeScript syntax checker using coffee. - -See URL `https://coffeescript.org/'." - ;; --print suppresses generation of compiled .js files - :command ("coffee" "--compile" "--print" "--stdio") - :standard-input t - :error-patterns - ((error line-start "[stdin]:" line ":" column - ": error: " (message) line-end)) - :modes coffee-mode - :next-checkers ((warning . coffee-coffeelint))) - -(flycheck-def-config-file-var flycheck-coffeelintrc coffee-coffeelint - ".coffeelint.json") - -(flycheck-define-checker coffee-coffeelint - "A CoffeeScript style checker using coffeelint. - -See URL `http://www.coffeelint.org/'." - :command - ("coffeelint" - (config-file "--file" flycheck-coffeelintrc) - "--stdin" "--reporter" "checkstyle") - :standard-input t - :error-parser flycheck-parse-checkstyle - :error-filter (lambda (errors) - (flycheck-remove-error-file-names - "stdin" (flycheck-remove-error-ids - (flycheck-sanitize-errors errors)))) - :modes coffee-mode) - -(defun flycheck-coq-error-filter (errors) - "Sanitize Coq ERRORS and compute end-lines and end-columns." - (flycheck-increment-error-columns errors) - (dolist (err errors) - (setf (flycheck-error-message err) - (replace-regexp-in-string (rx (1+ (syntax whitespace)) line-end) - "" (flycheck-error-message err) - 'fixedcase 'literal)) - (-when-let* ((end-col (flycheck-error-end-column err))) - ;; Coq reports an offset (potentially past eol), not an end column - (let* ((line (flycheck-error-line err)) - (end-lc (save-excursion - (flycheck-goto-line line) - (goto-char (+ (point) (1- end-col))) - (flycheck-line-column-at-point)))) - (setf (flycheck-error-end-line err) (car end-lc)) - (setf (flycheck-error-end-column err) (cdr end-lc))))) - (flycheck-sanitize-errors errors)) - -(flycheck-define-checker coq - "A Coq syntax checker using the Coq compiler. - -See URL `https://coq.inria.fr/'." - ;; We use coqtop in batch mode, because coqc is picky about file names. - :command ("coqtop" "-batch" "-load-vernac-source" source) - :error-patterns - ((error line-start "File \"" (file-name) "\", line " line - ", characters " column "-" end-column ":\n" - (or "Syntax error:" "Error:") - ;; Most Coq error messages span multiple lines, and end with a dot. - ;; There are simple one-line messages, too, though. - (message (or (and (one-or-more (or not-newline "\n")) ".") - (one-or-more not-newline))) - line-end)) - :error-filter flycheck-coq-error-filter - :modes coq-mode) - -(flycheck-define-checker css-csslint - "A CSS syntax and style checker using csslint. - -See URL `https://github.com/CSSLint/csslint'." - :command ("csslint" "--format=checkstyle-xml" source) - :error-parser flycheck-parse-checkstyle - :error-filter flycheck-dequalify-error-ids - :modes css-mode) - -(defconst flycheck-stylelint-args '("--formatter" "json") - "Common arguments to stylelint invocations.") - -(flycheck-def-config-file-var flycheck-stylelintrc - (css-stylelint scss-stylelint less-stylelint) nil) - -(flycheck-def-option-var flycheck-stylelint-quiet - nil (css-stylelint scss-stylelint less-stylelint) - "Whether to run stylelint in quiet mode. - -When non-nil, enable quiet mode, via `--quiet'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . 26)) - -(defconst flycheck-stylelint-error-re - (flycheck-rx-to-string - '(: line-start (id (one-or-more word)) ": " (message) line-end))) - -(defun flycheck-parse-stylelint (output checker buffer) - "Parse stylelint errors from OUTPUT. - -CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -The CHECKER usually returns the errors as JSON. - -If the CHECKER throws an Error it returns an Error message with a stacktrace." - (condition-case nil - (flycheck-parse-stylelint-json output checker buffer) - - ;; The output could not be parsed as JSON - (json-error - - ;; Extract a flycheck error from the output (with a regular expression) - ;; For match-string 4/5 see flycheck-rx-message/flycheck-rx-id - (when (string-match flycheck-stylelint-error-re output) - (list (flycheck-error-new-at - 1 nil 'error - (match-string 4 output) - :id (match-string 5 output) - :checker checker - :buffer buffer - :filename (buffer-file-name buffer))))))) - -(defun flycheck-parse-stylelint-json (output checker buffer) - "Parse stylelint JSON errors from OUTPUT. - -CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `http://stylelint.io/developer-guide/formatters/' for information -about the JSON format of stylelint." - (let ((json-object-type 'plist)) - - ;; stylelint returns a vector of result objects - ;; Since we only passed one file, the first element is enough - (let* ((stylelint-output (elt (json-read-from-string output) 0)) - (filename (buffer-file-name buffer)) - - ;; Turn all deprecations into warnings - (deprecations - (mapcar (lambda (d) - (flycheck-error-new-at - 1 nil 'warning - (plist-get d :text) - :id "Deprecation Warning" - :checker checker - :buffer buffer - :filename filename)) - (plist-get stylelint-output :deprecations))) - - ;; Turn all invalid options into errors - (invalid-options - (mapcar (lambda (io) - (flycheck-error-new-at - 1 nil 'error - (plist-get io :text) - :id "Invalid Option" - :checker checker - :buffer buffer - :filename filename)) - (plist-get stylelint-output :invalidOptionWarnings))) - - ;; Read all linting warnings - (warnings - (mapcar (lambda (w) - (flycheck-error-new-at - (plist-get w :line) (plist-get w :column) - (pcase (plist-get w :severity) - (`"error" 'error) - (`"warning" 'warning) - ;; Default to info for unknown .severity - (_ 'info)) - (plist-get w :text) - :id (plist-get w :rule) - :checker checker - :buffer buffer - :filename filename)) - (plist-get stylelint-output :warnings)))) - - ;; Return the combined errors (deprecations, invalid options, warnings) - (append deprecations invalid-options warnings)))) - -(flycheck-define-checker css-stylelint - "A CSS syntax and style checker using stylelint. - -See URL `http://stylelint.io/'." - :command ("stylelint" - (eval flycheck-stylelint-args) - (option-flag "--quiet" flycheck-stylelint-quiet) - (config-file "--config" flycheck-stylelintrc) - "--stdin-filename" (eval (or (buffer-file-name) "style.css"))) - :standard-input t - :error-parser flycheck-parse-stylelint - :predicate flycheck-buffer-nonempty-p - :modes (css-mode)) - -(flycheck-def-option-var flycheck-cuda-language-standard nil cuda-nvcc - "Our CUDA Language Standard." - :type '(choice (const :tag "Default standard" nil) - (string :tag "Language standard")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "32")) -(make-variable-buffer-local 'flycheck-cuda-language-standard) - -(flycheck-def-option-var flycheck-cuda-includes nil cuda-nvcc - "Our include directories to pass to nvcc." - :type '(repeat (file :tag "Include file")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "32")) - -(flycheck-def-option-var flycheck-cuda-definitions nil cuda-nvcc - "Additional preprocessor definitions for nvcc. -A list of strings to pass to cuda, a la flycheck-clang" - :type '(repeat (string :tag "Definitions")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "32")) - -(flycheck-def-option-var flycheck-cuda-include-path nil cuda-nvcc - "A list of include directories for nvcc." - :type '(repeat (directory :tag "Include directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "32")) - -(flycheck-define-checker cuda-nvcc - "A CUDA C/C++ syntax checker using nvcc. - -See URL `https://developer.nvidia.com/cuda-llvm-compiler'." - :command ("nvcc" - "-c" ;; Compile Only - "--output-file" "/dev/null" ;; avoid creating output .o - "--x=cu" ;; explicitly specify it's a CUDA language file - (option "-std=" flycheck-cuda-language-standard concat) - (option-list "-include" flycheck-cuda-includes) - (option-list "-D" flycheck-cuda-definitions concat) - (option-list "-I" flycheck-cuda-include-path) - source) - :error-patterns - ((error line-start - (message "In file included from") - " " (or "" (file-name)) - ":" line ":" line-end) - (error line-start (or "" (file-name)) - "(" line "): error: " (message) line-end) - (error line-start (or "" (file-name)) - ":" line ":" column - ": fatal error: " (optional (message)) line-end) - (warning line-start (or "" (file-name)) - "(" line "): warning: " (message) line-end)) - :modes cuda-mode) - - -(flycheck-def-option-var flycheck-cwl-schema-path nil cwl - "A path for the schema file for Common Workflow Language. - -The value of this variable is a string that denotes a path for -the schema file of Common Workflow Language." - :type '(choice (const :tag "None" nil) - (file :tag "Schema file")) - :safe #'flycheck-string-or-nil-p) - -(flycheck-define-checker cwl - "A CWL syntax checker using Schema Salad validator. - -Requires Schema Salad 2.6.20171101113912 or newer. -See URL `https://www.commonwl.org/v1.0/SchemaSalad.html'." - :command ("schema-salad-tool" - "--quiet" - "--print-oneline" - (eval flycheck-cwl-schema-path) - source-inplace) - :error-patterns - ((error line-start - (file-name) ":" line ":" column ":" (zero-or-more blank) - (message (one-or-more not-newline)) - line-end)) - :modes cwl-mode) - -(defconst flycheck-d-module-re - (rx "module" (one-or-more (syntax whitespace)) - (group (one-or-more (not (syntax whitespace)))) - (zero-or-more (syntax whitespace)) - ";") - "Regular expression to match a D module declaration.") - -(defun flycheck-d-base-directory () - "Get the relative base directory path for this module." - (let* ((file-name (buffer-file-name)) - (module-file (if (and file-name - (string= (file-name-nondirectory file-name) - "package.d")) - (directory-file-name (file-name-directory file-name)) - file-name))) - (flycheck-module-root-directory - (flycheck-find-in-buffer flycheck-d-module-re) - module-file))) - -(flycheck-def-option-var flycheck-dmd-include-path nil d-dmd - "A list of include directories for dmd. - -The value of this variable is a list of strings, where each -string is a directory to add to the include path of dmd. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Include directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.18")) - -(flycheck-def-args-var flycheck-dmd-args d-dmd - :package-version '(flycheck . "0.24")) - -(flycheck-define-checker d-dmd - "A D syntax checker using the DMD compiler. - -Requires DMD 2.066 or newer. See URL `https://dlang.org/'." - :command ("dmd" - "-debug" ; Compile in debug mode - "-o-" ; Don't generate an object file - "-vcolumns" ; Add columns in output - "-wi" ; Compilation will continue even if there are warnings - (eval (concat "-I" (flycheck-d-base-directory))) - (option-list "-I" flycheck-dmd-include-path concat) - (eval flycheck-dmd-args) - (source ".d")) - :error-patterns - ((error line-start - (file-name) "(" line "," column "): Error: " (message) - line-end) - (warning line-start (file-name) "(" line "," column "): " - (or "Warning" "Deprecation") ": " (message) line-end) - (info line-start (file-name) "(" line "," column "): " - (one-or-more " ") (message) line-end)) - :modes d-mode) - -(flycheck-define-checker dockerfile-hadolint - "A Dockerfile syntax checker using the hadolint. - -See URL `http://github.com/hadolint/hadolint/'." - :command ("hadolint" "-") - :standard-input t - :error-patterns - ((error line-start - (file-name) ":" line ":" column " " (message) - line-end) - (warning line-start - (file-name) ":" line " " (id (one-or-more alnum)) " " (message) - line-end)) - :error-filter - (lambda (errors) - (flycheck-sanitize-errors - (flycheck-remove-error-file-names "/dev/stdin" errors))) - :modes dockerfile-mode) - -(defun flycheck-credo--working-directory (&rest _ignored) - "Check if `credo' is installed as dependency in the application." - (and buffer-file-name - (locate-dominating-file buffer-file-name "deps/credo"))) - -(flycheck-def-option-var flycheck-elixir-credo-strict nil elixir-credo - "Enable strict mode in `credo'. - -When non-nil, pass the `--strict' flag to credo." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "32")) - -(flycheck-define-checker elixir-credo - "An Elixir checker for static code analysis using Credo. - -See `http://credo-ci.org/'." - :command ("mix" "credo" - (option-flag "--strict" flycheck-elixir-credo-strict) - "--format" "flycheck" - "--read-from-stdin" source-original) - :standard-input t - :working-directory flycheck-credo--working-directory - :enabled flycheck-credo--working-directory - :error-patterns - ((info line-start - (file-name) ":" line (optional ":" column) ": " - (or "F" "R" "C") ": " (message) line-end) - (warning line-start - (file-name) ":" line (optional ":" column) ": " - (or "D" "W") ": " (message) line-end)) - :modes elixir-mode) - -(defconst flycheck-this-emacs-executable - (concat invocation-directory invocation-name) - "The path to the currently running Emacs executable.") - -(defconst flycheck-emacs-args '("-Q" "--batch") - "Common arguments to Emacs invocations.") - -(defmacro flycheck-prepare-emacs-lisp-form (&rest body) - "Prepare BODY for use as check form in a subprocess." - (declare (indent 0)) - `(flycheck-sexp-to-string - '(progn - (defvar jka-compr-inhibit) - (unwind-protect - ;; Flycheck inhibits compression of temporary files, thus we - ;; must not attempt to decompress. - (let ((jka-compr-inhibit t)) - ;; Strip option-argument separator from arguments, if present - (when (equal (car command-line-args-left) "--") - (setq command-line-args-left (cdr command-line-args-left))) - ,@body) - ;; Prevent Emacs from processing the arguments on its own, see - ;; https://github.com/flycheck/flycheck/issues/319 - (setq command-line-args-left nil))))) - -(defun flycheck-emacs-lisp-bytecomp-config-form () - "Prepare an Emacs Lisp form to set byte-compiler variables." - (flycheck-sexp-to-string - `(progn - (require 'bytecomp) - (setq byte-compile-root-dir - ,(if buffer-file-name - (file-name-directory buffer-file-name) - default-directory))))) - -(defconst flycheck-emacs-lisp-check-form - (flycheck-prepare-emacs-lisp-form - ;; Keep track of the generated bytecode files, to delete them after byte - ;; compilation. - (require 'bytecomp) - (defvar flycheck-byte-compiled-files nil) - (let ((byte-compile-dest-file-function - (lambda (source) - (let ((temp-file (make-temp-file (file-name-nondirectory source)))) - (push temp-file flycheck-byte-compiled-files) - temp-file)))) - (unwind-protect - (byte-compile-file (car command-line-args-left)) - (mapc (lambda (f) (ignore-errors (delete-file f))) - flycheck-byte-compiled-files)) - (when (bound-and-true-p flycheck-emacs-lisp-check-declare) - (check-declare-file (car command-line-args-left)))))) - -(flycheck-def-option-var flycheck-emacs-lisp-load-path nil emacs-lisp - "Load path to use in the Emacs Lisp syntax checker. - -When set to `inherit', use the `load-path' of the current Emacs -session during syntax checking. - -When set to a list of strings, add each directory in this list to -the `load-path' before invoking the byte compiler. Relative -paths in this list are expanded against the `default-directory' -of the buffer to check. - -When nil, do not explicitly set the `load-path' during syntax -checking. The syntax check only uses the built-in `load-path' of -Emacs in this case. - -Note that changing this variable can lead to wrong results of the -syntax check, e.g. if an unexpected version of a required library -is used." - :type '(choice (const :tag "Inherit current `load-path'" inherit) - (repeat :tag "Load path" directory)) - :risky t - :package-version '(flycheck . "0.14")) - -(flycheck-def-option-var flycheck-emacs-lisp-initialize-packages - 'auto emacs-lisp - "Whether to initialize packages in the Emacs Lisp syntax checker. - -When nil, never initialize packages. When `auto', initialize -packages only when checking `user-init-file' or files from -`user-emacs-directory'. For any other non-nil value, always -initialize packages. - -When initializing packages is enabled the `emacs-lisp' syntax -checker calls `package-initialize' before byte-compiling the file -to be checked. It also sets `package-user-dir' according to -`flycheck-emacs-lisp-package-user-dir'." - :type '(choice (const :tag "Do not initialize packages" nil) - (const :tag "Initialize packages for configuration only" auto) - (const :tag "Always initialize packages" t)) - :risky t - :package-version '(flycheck . "0.14")) - -(defconst flycheck-emacs-lisp-package-initialize-form - (flycheck-sexp-to-string - '(with-demoted-errors "Error during package initialization: %S" - (package-initialize))) - "Form used to initialize packages.") - -(defun flycheck-option-emacs-lisp-package-initialize (value) - "Option VALUE filter for `flycheck-emacs-lisp-initialize-packages'." - (let ((shall-initialize - (if (eq value 'auto) - (or (flycheck-in-user-emacs-directory-p - (or buffer-file-name default-directory)) - ;; `user-init-file' is nil in non-interactive sessions. Now, - ;; no user would possibly use Flycheck in a non-interactive - ;; session, but our unit tests run non-interactively, so we - ;; have to handle this case anyway - (and user-init-file buffer-file-name - (flycheck-same-files-p buffer-file-name user-init-file))) - value))) - (when shall-initialize - ;; If packages shall be initialized, return the corresponding form, - ;; otherwise make Flycheck ignore the option by returning nil. - flycheck-emacs-lisp-package-initialize-form))) - -(flycheck-def-option-var flycheck-emacs-lisp-package-user-dir nil emacs-lisp - "Package directory for the Emacs Lisp syntax checker. - -If set to a string set `package-user-dir' to the value of this -variable before initializing packages. If set to nil just inherit -the value of `package-user-dir' from the running Emacs session. - -This variable has no effect, if -`flycheck-emacs-lisp-initialize-packages' is nil." - :type '(choice (const :tag "Default package directory" nil) - (directory :tag "Custom package directory")) - :risky t - :package-version '(flycheck . "0.14")) - -(defun flycheck-option-emacs-lisp-package-user-dir (value) - "Option VALUE filter for `flycheck-emacs-lisp-package-user-dir'." - ;; Inherit the package directory from our Emacs session - (let ((value (or value (bound-and-true-p package-user-dir)))) - (when value - (flycheck-sexp-to-string `(setq package-user-dir ,value))))) - -(flycheck-def-option-var flycheck-emacs-lisp-check-declare nil emacs-lisp - "If non-nil, check ‘declare-function’ forms using ‘check-declare-file’." - :type '(choice (const :tag "Do not check declare forms" nil) - (const :tag "Check declare forms" t)) - :risky t - :package-version '(flycheck . "31")) - -(defun flycheck-option-emacs-lisp-check-declare (value) - "Option VALUE filter for `flycheck-emacs-lisp-check-declare'." - (when value - (flycheck-sexp-to-string - `(progn - (defvar flycheck-emacs-lisp-check-declare) - (setq flycheck-emacs-lisp-check-declare ,value))))) - -(defun flycheck--emacs-lisp-enabled-p () - "Check whether to enable Emacs Lisp checkers in the current buffer." - (not - (or - ;; Do not check buffers used for autoloads generation during package - ;; installation. These buffers are too short-lived for being checked, and - ;; doing so causes spurious errors. See - ;; https://github.com/flycheck/flycheck/issues/45 and - ;; https://github.com/bbatsov/prelude/issues/248. We must also not check - ;; compilation buffers, but as these are ephemeral, Flycheck won't check - ;; them anyway. - (flycheck-autoloads-file-p) - ;; Cask/Carton and dir-locals files contain data, not code, and don't need - ;; to follow Checkdoc conventions either. - (and (buffer-file-name) - (member (file-name-nondirectory (buffer-file-name)) - '("Cask" "Carton" ".dir-locals.el" ".dir-locals-2.el")))))) - -(flycheck-define-checker emacs-lisp - "An Emacs Lisp syntax checker using the Emacs Lisp Byte compiler. - -See Info Node `(elisp)Byte Compilation'." - :command ("emacs" (eval flycheck-emacs-args) - (eval - (let ((path (pcase flycheck-emacs-lisp-load-path - (`inherit load-path) - (p (seq-map #'expand-file-name p))))) - (flycheck-prepend-with-option "--directory" path))) - (option "--eval" flycheck-emacs-lisp-package-user-dir nil - flycheck-option-emacs-lisp-package-user-dir) - (option "--eval" flycheck-emacs-lisp-initialize-packages nil - flycheck-option-emacs-lisp-package-initialize) - (option "--eval" flycheck-emacs-lisp-check-declare nil - flycheck-option-emacs-lisp-check-declare) - "--eval" (eval (flycheck-emacs-lisp-bytecomp-config-form)) - "--eval" (eval flycheck-emacs-lisp-check-form) - "--" - source-inplace) - :error-patterns - ((error line-start (file-name) ":" line ":" column ":" - (zero-or-more whitespace) "Error:" (zero-or-more whitespace) - (message (zero-or-more not-newline) - (zero-or-more "\n " (zero-or-more not-newline))) - line-end) - (warning line-start (file-name) ":" line ":" column ":" - (zero-or-more whitespace) "Warning:" (zero-or-more whitespace) - (message (zero-or-more not-newline) - (zero-or-more "\n " (zero-or-more not-newline))) - line-end) - (warning line-start (file-name) ":" line (optional ":" column) ":" - (zero-or-more whitespace) "Warning (check-declare): said\n" - (message (zero-or-more " " (zero-or-more not-newline)) - (zero-or-more "\n " (zero-or-more not-newline))) - line-end) - ;; The following is for Emacs 24 ‘check-declare-file’, which uses a - ;; less informative format. - (warning line-start "Warning (check-declare): " (file-name) " said " - (message (zero-or-more not-newline)) - line-end)) - :error-filter - (lambda (errors) - (flycheck-fill-empty-line-numbers - (flycheck-collapse-error-message-whitespace - (flycheck-sanitize-errors errors)))) - :modes (emacs-lisp-mode lisp-interaction-mode) - :enabled flycheck--emacs-lisp-enabled-p - :predicate - (lambda () - ;; Do not check buffers that should not be byte-compiled. The checker - ;; process will refuse to compile these, which would confuse Flycheck - (not (bound-and-true-p no-byte-compile))) - :next-checkers (emacs-lisp-checkdoc)) - -(defconst flycheck-emacs-lisp-checkdoc-form - (flycheck-prepare-emacs-lisp-form - (unless (require 'elisp-mode nil 'no-error) - ;; TODO: Fallback for Emacs 24, remove when dropping support for 24 - (require 'lisp-mode)) - (require 'checkdoc) - - (let ((source (car command-line-args-left)) - ;; Remember the default directory of the process - (process-default-directory default-directory)) - ;; Note that we deliberately use our custom approach even despite of - ;; `checkdoc-file' which was added to Emacs 25.1. While it's conceptually - ;; the better thing, its implementation has too many flaws to be of use - ;; for us. - (with-temp-buffer - (insert-file-contents source 'visit) - (setq buffer-file-name source) - ;; And change back to the process default directory to make file-name - ;; back-substutition work - (setq default-directory process-default-directory) - (with-demoted-errors "Error in checkdoc: %S" - ;; Checkdoc needs the Emacs Lisp syntax table and comment syntax to - ;; parse sexps and identify docstrings correctly; see - ;; https://github.com/flycheck/flycheck/issues/833 - (delay-mode-hooks (emacs-lisp-mode)) - (setq delayed-mode-hooks nil) - (checkdoc-current-buffer t) - (with-current-buffer checkdoc-diagnostic-buffer - (princ (buffer-substring-no-properties (point-min) (point-max))) - (kill-buffer))))))) - -(defconst flycheck-emacs-lisp-checkdoc-variables - '(checkdoc-symbol-words - checkdoc-arguments-in-order-flag - checkdoc-force-history-flag - checkdoc-permit-comma-termination-flag - checkdoc-force-docstrings-flag - checkdoc-package-keywords-flag - checkdoc-spellcheck-documentation-flag - checkdoc-verb-check-experimental-flag - checkdoc-max-keyref-before-warn - sentence-end-double-space) - "Variables inherited by the checkdoc subprocess.") - -(defun flycheck-emacs-lisp-checkdoc-variables-form () - "Make a sexp to pass relevant variables to a checkdoc subprocess. - -Variables are taken from `flycheck-emacs-lisp-checkdoc-variables'." - `(progn - ,@(seq-map (lambda (opt) `(setq-default ,opt ',(symbol-value opt))) - (seq-filter #'boundp flycheck-emacs-lisp-checkdoc-variables)))) - -(flycheck-define-checker emacs-lisp-checkdoc - "An Emacs Lisp style checker using CheckDoc. - -The checker runs `checkdoc-current-buffer'." - :command ("emacs" (eval flycheck-emacs-args) - "--eval" (eval (flycheck-sexp-to-string - (flycheck-emacs-lisp-checkdoc-variables-form))) - "--eval" (eval flycheck-emacs-lisp-checkdoc-form) - "--" source) - :error-patterns - ((info line-start (file-name) ":" line ": " (message) line-end)) - :modes (emacs-lisp-mode) - :enabled flycheck--emacs-lisp-enabled-p) - -(dolist (checker '(emacs-lisp emacs-lisp-checkdoc)) - (setf (car (flycheck-checker-get checker 'command)) - flycheck-this-emacs-executable)) - -(defun flycheck-ember-template--check-for-config (&rest _ignored) - "Check the required config file is available up the file system." - (and buffer-file-name - (locate-dominating-file buffer-file-name ".template-lintrc.js"))) - -(defun flycheck-ember-template--parse-error (output checker buffer) - "Parse Ember-template-lint errors/warnings from JSON OUTPUT. -CHECKER and BUFFER denote the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively." - (mapcar (lambda (err) - (let-alist err - (flycheck-error-new-at - .line - .column - (pcase .severity - (2 'error) - (1 'warning) - (_ 'warning)) - .message - :id .rule - :checker checker - :buffer buffer - :filename (buffer-file-name buffer)))) - (cdr (car (car (flycheck-parse-json output)))))) - -(flycheck-def-config-file-var flycheck-ember-template-lintrc - ember-template - ".template-lintrc.js") - -(flycheck-define-checker ember-template - "An Ember template checker using ember-template-lint." - :command ("ember-template-lint" - (config-file "--config-path" flycheck-ember-template-lintrc) - "--filename" source-original - "--json") - :standard-input t - :error-parser flycheck-ember-template--parse-error - :modes web-mode - :enabled flycheck-ember-template--check-for-config - :working-directory flycheck-ember-template--check-for-config) - -(flycheck-def-option-var flycheck-erlang-include-path nil erlang - "A list of include directories for Erlang. - -The value of this variable is a list of strings, where each -string is a directory to add to the include path of erlc. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Include directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.24")) - -(flycheck-def-option-var flycheck-erlang-library-path nil erlang - "A list of library directories for Erlang. - -The value of this variable is a list of strings, where each -string is a directory to add to the library path of erlc. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Library directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.24")) - -(flycheck-define-checker erlang - "An Erlang syntax checker using the Erlang interpreter. - -See URL `http://www.erlang.org/'." - :command ("erlc" - "-o" temporary-directory - (option-list "-I" flycheck-erlang-include-path) - (option-list "-pa" flycheck-erlang-library-path) - "-Wall" - source) - :error-patterns - ((warning line-start (file-name) ":" line ": Warning:" (message) line-end) - (error line-start (file-name) ":" line ": " (message) line-end)) - :modes erlang-mode - :enabled (lambda () (string-suffix-p ".erl" (buffer-file-name)))) - -(defun flycheck--contains-rebar-config (dir-name) - "Return DIR-NAME if rebar config file exists in DIR-NAME, nil otherwise." - (when (or (file-exists-p (expand-file-name "rebar.config" dir-name)) - (file-exists-p (expand-file-name "rebar.config.script" dir-name))) - dir-name)) - -(defun flycheck--locate-rebar3-project-root - (file-name &optional prev-file-name acc) - "Find the top-most rebar project root for source FILE-NAME. - -A project root directory is any directory containing a -rebar.config file. Find the top-most directory to move out of any -nested dependencies. - -FILE-NAME is a source file for which to find the project. - -PREV-FILE-NAME helps us prevent infinite looping - -ACC is an accumulator that keeps the list of results, the first -non-nil of which will be our project root. - -Return the absolute path to the directory" - (if (string= file-name prev-file-name) - (car (remove nil acc)) - (let ((current-dir (file-name-directory file-name))) - (flycheck--locate-rebar3-project-root - (directory-file-name current-dir) - file-name - (cons (flycheck--contains-rebar-config current-dir) acc))))) - -(defun flycheck-rebar3-project-root (&optional _checker) - "Return directory where rebar.config is located." - (flycheck--locate-rebar3-project-root buffer-file-name)) - -(flycheck-def-option-var flycheck-erlang-rebar3-profile nil erlang-rebar3 - "The rebar3 profile to use. - -The profile used when compiling, if VALUE is nil \"test\" will be used -when the file is located in test directory, otherwise \"default\" will be -used as profile." - :type '(choice (const :tag "Automatic" nil) - (string :tag "Profile")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "32")) - -(defun flycheck-erlang-rebar3-get-profile () - "Return rebar3 profile. - -Use flycheck-erlang-rebar3-profile if set, otherwise use test or eqc profile if -directory name is \"test\" or \"eqc\", or else \"default\"." - (or - flycheck-erlang-rebar3-profile - (with-no-warnings - ;; `seq-contains-p' is only in seq >= 2.21 - (seq-contains '("test" "eqc") - (and buffer-file-name - (file-name-base - (directory-file-name - (file-name-directory buffer-file-name)))))) - "default")) - -(flycheck-define-checker erlang-rebar3 - "An Erlang syntax checker using the rebar3 build tool." - :command ("rebar3" "as" (eval (flycheck-erlang-rebar3-get-profile)) "compile") - :error-parser flycheck-parse-with-patterns-without-color - :error-patterns - ((warning line-start - (file-name) ":" line ": Warning:" (message) line-end) - (error line-start - (file-name) ":" line ": " (message) line-end)) - :modes erlang-mode - :enabled flycheck-rebar3-project-root - :predicate flycheck-buffer-saved-p - :working-directory flycheck-rebar3-project-root) - -(flycheck-define-checker eruby-erubis - "An eRuby syntax checker using the `erubis' command. - -See URL `http://www.kuwata-lab.com/erubis/'." - :command ("erubis" "-z" source) - :error-patterns - ((error line-start (file-name) ":" line ": " (message) line-end)) - :modes (html-erb-mode rhtml-mode) - :next-checkers ((warning . eruby-ruumba))) - -(flycheck-def-config-file-var flycheck-ruumbarc eruby-ruumba ".ruumba.yml") - -(flycheck-def-option-var flycheck-ruumba-lint-only nil eruby-ruumba - "Whether to only report code issues in Ruumba. - -When non-nil, only report code issues in Ruumba, via `--lint'. -Otherwise report style issues as well." - :safe #'booleanp - :type 'boolean - :package-version '(flycheck . "32")) - -(flycheck-define-checker eruby-ruumba - "An eRuby syntax and style checker using the Ruumba tool. - -You need at least Ruumba 0.1.7 for this syntax checker. - -See URL `https://github.com/ericqweinstein/ruumba'." - :command ("ruumba" - "--display-cop-names" - "--force-exclusion" - "--format" "emacs" - "--cache" "false" - (config-file "--config" flycheck-ruumbarc) - (option-flag "--lint" flycheck-ruumba-lint-only) - ;; Ruumba takes the original file name as argument when reading - ;; from standard input - "--stdin" source-original) - :standard-input t - :working-directory flycheck-ruby--find-project-root - :error-patterns - ((info line-start (file-name) ":" line ":" column ": C: " - (optional (id (one-or-more (not (any ":")))) ": ") (message) line-end) - (warning line-start (file-name) ":" line ":" column ": W: " - (optional (id (one-or-more (not (any ":")))) ": ") (message) - line-end) - (error line-start (file-name) ":" line ":" column ": " (or "E" "F") ": " - (optional (id (one-or-more (not (any ":")))) ": ") (message) - line-end)) - :modes (html-erb-mode rhtml-mode)) - -(flycheck-def-args-var flycheck-gfortran-args fortran-gfortran - :package-version '(flycheck . "0.22")) - -(flycheck-def-option-var flycheck-gfortran-include-path nil fortran-gfortran - "A list of include directories for GCC Fortran. - -The value of this variable is a list of strings, where each -string is a directory to add to the include path of gcc. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Include directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-gfortran-language-standard "f95" - fortran-gfortran - "The language standard to use in GFortran. - -The value of this variable is either a string denoting a language -standard, or nil, to use the default standard. When non-nil, -pass the language standard via the `-std' option." - :type '(choice (const :tag "Default standard" nil) - (string :tag "Language standard")) - :package-version '(flycheck . "0.20")) - -(flycheck-def-option-var flycheck-gfortran-layout nil fortran-gfortran - "The source code layout to use in GFortran. - -The value of this variable is one of the following symbols: - -nil - Let gfortran determine the layout from the extension - -`free' - Use free form layout - - -`fixed' - Use fixed form layout - -In any other case, an error is signaled." - :type '(choice (const :tag "Guess layout from extension" nil) - (const :tag "Free form layout" free) - (const :tag "Fixed form layout" fixed)) - :safe (lambda (value) (or (not value) (memq value '(free fixed)))) - :package-version '(flycheck . "0.20")) - -(defun flycheck-option-gfortran-layout (value) - "Option VALUE filter for `flycheck-gfortran-layout'." - (pcase value - (`nil nil) - (`free "free-form") - (`fixed "fixed-form") - (_ (error "Invalid value for flycheck-gfortran-layout: %S" value)))) - -(flycheck-def-option-var flycheck-gfortran-warnings '("all" "extra") - fortran-gfortran - "A list of warnings for GCC Fortran. - -The value of this variable is a list of strings, where each string -is the name of a warning category to enable. By default, all -recommended warnings and some extra warnings are enabled (as by -`-Wall' and `-Wextra' respectively). - -Refer to the gfortran manual at URL -`https://gcc.gnu.org/onlinedocs/gfortran/' for more information -about warnings" - :type '(choice (const :tag "No additional warnings" nil) - (repeat :tag "Additional warnings" - (string :tag "Warning name"))) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.20")) - -(flycheck-define-checker fortran-gfortran - "An Fortran syntax checker using GCC. - -Uses GCC's Fortran compiler gfortran. See URL -`https://gcc.gnu.org/onlinedocs/gfortran/'." - :command ("gfortran" - "-fsyntax-only" - "-fshow-column" - ;; Do not visually indicate the source location - "-fno-diagnostics-show-caret" - ;; Do not show the corresponding warning group - "-fno-diagnostics-show-option" - ;; Fortran has similar include processing as C/C++ - "-iquote" (eval (flycheck-c/c++-quoted-include-directory)) - (option "-std=" flycheck-gfortran-language-standard concat) - (option "-f" flycheck-gfortran-layout concat - flycheck-option-gfortran-layout) - (option-list "-W" flycheck-gfortran-warnings concat) - (option-list "-I" flycheck-gfortran-include-path concat) - (eval flycheck-gfortran-args) - source) - :error-patterns - ((error line-start (file-name) ":" line (or ":" ".") column (or ": " ":\n") - (or (= 3 (zero-or-more not-newline) "\n") "") - (or "Error" "Fatal Error") ": " - (message) line-end) - (warning line-start (file-name) ":" line (or ":" ".") column (or ": " ":\n") - (or (= 3 (zero-or-more not-newline) "\n") "") - "Warning: " (message) line-end)) - :modes (fortran-mode f90-mode)) - -(flycheck-define-checker go-gofmt - "A Go syntax and style checker using the gofmt utility. - -See URL `https://golang.org/cmd/gofmt/'." - :command ("gofmt") - :standard-input t - :error-patterns - ((error line-start ":" line ":" column ": " - (message) line-end)) - :modes go-mode - :next-checkers ((warning . go-golint) - ;; Fall back, if go-golint doesn't exist - (warning . go-vet) - ;; Fall back, if go-vet doesn't exist - (warning . go-build) (warning . go-test) - (warning . go-errcheck) - (warning . go-unconvert) - (warning . go-staticcheck))) - -(flycheck-define-checker go-golint - "A Go style checker using Golint. - -See URL `https://github.com/golang/lint'." - :command ("golint" source) - :error-patterns - ((warning line-start (file-name) ":" line ":" column ": " (message) line-end)) - :modes go-mode - :next-checkers (go-vet - ;; Fall back, if go-vet doesn't exist - go-build go-test go-errcheck go-unconvert)) - -(flycheck-def-option-var flycheck-go-vet-print-functions nil go-vet - "A list of print-like functions for `go vet'. - -Go vet will check these functions for format string problems and -issues, such as a mismatch between the number of formats used, -and the number of arguments given. - -Each entry is in the form Name:N where N is the zero-based -argument position of the first argument involved in the print: -either the format or the first print argument for non-formatted -prints. For example, if you have Warn and Warnf functions that -take an io.Writer as their first argument, like Fprintf, --printfuncs=Warn:1,Warnf:1 " - :type '(repeat :tag "print-like functions" - (string :tag "function")) - :safe #'flycheck-string-list-p) - -(flycheck-define-checker go-vet - "A Go syntax checker using the `go vet' command. - -See URL `https://golang.org/cmd/go/' and URL -`https://golang.org/cmd/vet/'." - :command ("go" "vet" - (option "-printf.funcs=" flycheck-go-vet-print-functions concat - flycheck-option-comma-separated-list) - (source ".go")) - :error-patterns - ((warning line-start (file-name) ":" line ": " (message) line-end)) - :modes go-mode - :next-checkers (go-build - go-test - ;; Fall back if `go build' or `go test' can be used - go-errcheck - go-unconvert - go-staticcheck) - :verify (lambda (_) - (let* ((go (flycheck-checker-executable 'go-vet)) - (have-vet (member "vet" (ignore-errors - (process-lines go "tool"))))) - (list - (flycheck-verification-result-new - :label "go tool vet" - :message (if have-vet "present" "missing") - :face (if have-vet 'success '(bold error))))))) - -(flycheck-def-option-var flycheck-go-build-install-deps nil (go-build go-test) - "Whether to install dependencies in `go build' and `go test'. - -If non-nil automatically install dependencies with `go build' -while syntax checking." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.25")) - -(flycheck-def-option-var flycheck-go-build-tags nil - (go-build go-test go-errcheck go-staticcheck) - "A list of tags for `go build'. - -Each item is a string with a tag to be given to `go build'." - :type '(repeat (string :tag "Tag")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.25")) - - -(flycheck-def-option-var flycheck-go-version nil go-staticcheck - "The version of go that should be targeted by `staticcheck'. - -Should be a string representing a version, like 1.6 or 1.11.4. -See `https://staticcheck.io/docs/#targeting-go-versions' for -details." - :type '(choice (const :tag "Unspecified" nil) - (string :tag "Version")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "0.32")) - -(flycheck-define-checker go-build - "A Go syntax and type checker using the `go build' command. - -Requires Go 1.6 or newer. See URL `https://golang.org/cmd/go'." - :command ("go" "build" - (option-flag "-i" flycheck-go-build-install-deps) - ;; multiple tags are listed as "dev debug ..." - (option-list "-tags=" flycheck-go-build-tags concat) - "-o" null-device) - :error-patterns - ((error line-start (file-name) ":" line ":" - (optional column ":") " " - (message (one-or-more not-newline) - (zero-or-more "\n\t" (one-or-more not-newline))) - line-end) - ;; Catch error message about multiple packages in a directory, which doesn't - ;; follow the standard error message format. - (info line-start - (message "can't load package: package " - (one-or-more (not (any ?: ?\n))) - ": found packages " - (one-or-more not-newline)) - line-end)) - :error-filter - (lambda (errors) - (dolist (error errors) - (unless (flycheck-error-line error) - ;; Flycheck ignores errors without line numbers, but the error - ;; message about multiple packages in a directory doesn't come with a - ;; line number, so inject a fake one. - (setf (flycheck-error-line error) 1))) - errors) - :modes go-mode - :predicate (lambda () - (and (flycheck-buffer-saved-p) - (not (string-suffix-p "_test.go" (buffer-file-name))))) - :next-checkers ((warning . go-errcheck) - (warning . go-unconvert) - (warning . go-staticcheck))) - -(flycheck-define-checker go-test - "A Go syntax and type checker using the `go test' command. - -Requires Go 1.6 or newer. See URL `https://golang.org/cmd/go'." - :command ("go" "test" - (option-flag "-i" flycheck-go-build-install-deps) - (option-list "-tags=" flycheck-go-build-tags concat) - "-c" "-o" null-device) - :error-patterns - ((error line-start (file-name) ":" line ":" - (optional column ":") " " - (message (one-or-more not-newline) - (zero-or-more "\n\t" (one-or-more not-newline))) - line-end)) - :modes go-mode - :predicate - (lambda () (and (flycheck-buffer-saved-p) - (string-suffix-p "_test.go" (buffer-file-name)))) - :next-checkers ((warning . go-errcheck) - (warning . go-unconvert) - (warning . go-staticcheck))) - -(flycheck-define-checker go-errcheck - "A Go checker for unchecked errors. - -Requires errcheck newer than commit 8515d34 (Aug 28th, 2015). - -See URL `https://github.com/kisielk/errcheck'." - :command ("errcheck" - "-abspath" - (option-list "-tags=" flycheck-go-build-tags concat) - ".") - :error-patterns - ((warning line-start - (file-name) ":" line ":" column (or (one-or-more "\t") ": " ":\t") - (message) - line-end)) - :error-filter - (lambda (errors) - (let ((errors (flycheck-sanitize-errors errors))) - (dolist (err errors) - (-when-let (message (flycheck-error-message err)) - ;; Improve the messages reported by errcheck to make them more clear. - (setf (flycheck-error-message err) - (format "Ignored `error` returned from `%s`" message))))) - errors) - :modes go-mode - :predicate (lambda () (flycheck-buffer-saved-p)) - :next-checkers ((warning . go-unconvert) - (warning . go-staticcheck))) - -(flycheck-define-checker go-unconvert - "A Go checker looking for unnecessary type conversions. - -See URL `https://github.com/mdempsky/unconvert'." - :command ("unconvert" ".") - :error-patterns - ((warning line-start (file-name) ":" line ":" column ": " (message) line-end)) - :modes go-mode - :predicate (lambda () (flycheck-buffer-saved-p))) - -(flycheck-define-checker go-staticcheck - "A Go checker that performs static analysis and linting using -the `staticcheck' command. - -`staticcheck' is explicitly fully compatible with \"the last two -versions of go\". `staticheck' can target earlier versions (with -limited features) if `flycheck-go-version' is set. See URL -`https://staticcheck.io/'." - :command ("staticcheck" "-f" "json" - (option-list "-tags" flycheck-go-build-tags concat) - (option "-go" flycheck-go-version)) - - :error-parser flycheck-parse-go-staticcheck - :modes go-mode) - -(flycheck-define-checker groovy - "A groovy syntax checker using groovy compiler API. - -See URL `http://www.groovy-lang.org'." - :command ("groovy" "-e" - "import org.codehaus.groovy.control.* - -unit = new CompilationUnit() -unit.addSource(\"input\", System.in) - -try { - unit.compile(Phases.CONVERSION) -} catch (MultipleCompilationErrorsException e) { - e.errorCollector.write(new PrintWriter(System.out, true), null) -}") - :standard-input t - :error-patterns - ((error line-start "input: " line ":" (message) - " @ line " line ", column " column "." line-end)) - :modes groovy-mode) - -(flycheck-define-checker haml - "A Haml syntax checker using the Haml compiler. - -See URL `http://haml.info'." - :command ("haml" "-c" "--stdin") - :standard-input t - :error-patterns - ((error line-start "Syntax error on line " line ": " (message) line-end) - (error line-start ":" line ": syntax error, " (message) line-end)) - :modes haml-mode) - -(flycheck-define-checker handlebars - "A Handlebars syntax checker using the Handlebars compiler. - -See URL `http://handlebarsjs.com/'." - :command ("handlebars" "-i-") - :standard-input t - :error-patterns - ((error line-start - "Error: Parse error on line " line ":" (optional "\r") "\n" - (zero-or-more not-newline) "\n" (zero-or-more not-newline) "\n" - (message) line-end)) - :modes (handlebars-mode handlebars-sgml-mode web-mode) - :predicate - (lambda () - (if (eq major-mode 'web-mode) - ;; Check if this is a handlebars file since web-mode does not store the - ;; non-canonical engine name - (let* ((regexp-alist (bound-and-true-p web-mode-engine-file-regexps)) - (pattern (cdr (assoc "handlebars" regexp-alist)))) - (and pattern (buffer-file-name) - (string-match-p pattern (buffer-file-name)))) - t))) - -(defconst flycheck-haskell-module-re - (rx line-start (zero-or-more (or "\n" (any space))) - "module" (one-or-more (or "\n" (any space))) - (group (one-or-more (not (any space "(" "\n"))))) - "Regular expression for a Haskell module name.") - -(flycheck-def-args-var flycheck-ghc-args (haskell-stack-ghc haskell-ghc) - :package-version '(flycheck . "0.22")) - -(flycheck-def-option-var flycheck-ghc-stack-use-nix nil haskell-stack-ghc - "Whether to enable nix support in stack. - -When non-nil, stack will append '--nix' flag to any call." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "26")) - -(flycheck-def-option-var flycheck-ghc-stack-project-file nil haskell-stack-ghc - "Override project stack.yaml file. - -The value of this variable is a file path that refers to a yaml -file for the current stack project. Relative file paths are -resolved against the checker's working directory. When non-nil, -stack will get overridden value via `--stack-yaml'." - :type '(choice (const :tag "Unspecified" nil) - (file :tag "Project file")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "32")) - -(flycheck-def-option-var flycheck-ghc-no-user-package-database nil haskell-ghc - "Whether to disable the user package database in GHC. - -When non-nil, disable the user package database in GHC, via -`-no-user-package-db'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.16")) - -(flycheck-def-option-var flycheck-ghc-package-databases nil haskell-ghc - "Additional module databases for GHC. - -The value of this variable is a list of strings, where each -string is a directory of a package database. Each package -database is given to GHC via `-package-db'." - :type '(repeat (directory :tag "Package database")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.16")) - -(flycheck-def-option-var flycheck-ghc-search-path nil - (haskell-stack-ghc haskell-ghc) - "Module search path for (Stack) GHC. - -The value of this variable is a list of strings, where each -string is a directory containing Haskell modules. Each directory -is added to the GHC search path via `-i'." - :type '(repeat (directory :tag "Module directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.16")) - -(flycheck-def-option-var flycheck-ghc-language-extensions nil - (haskell-stack-ghc haskell-ghc) - "Language extensions for (Stack) GHC. - -The value of this variable is a list of strings, where each -string is a Haskell language extension, as in the LANGUAGE -pragma. Each extension is enabled via `-X'." - :type '(repeat (string :tag "Language extension")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.19")) - -(defvar flycheck-haskell-ghc-cache-directory nil - "The cache directory for `ghc' output.") - -(defun flycheck-haskell-ghc-cache-directory () - "Get the cache location for `ghc' output. - -If no cache directory exists yet, create one and return it. -Otherwise return the previously used cache directory." - (setq flycheck-haskell-ghc-cache-directory - (or flycheck-haskell-ghc-cache-directory - (make-temp-file "flycheck-haskell-ghc-cache" 'directory)))) - -(defun flycheck--locate-dominating-file-matching (directory regexp) - "Search for a file in directory hierarchy starting at DIRECTORY. - -Look up the directory hierarchy from DIRECTORY for a directory -containing a file that matches REGEXP." - (locate-dominating-file - directory - (lambda (dir) - (directory-files dir nil regexp t)))) - -(defun flycheck-haskell--find-stack-default-directory () - "Find a directory to run haskell-stack-ghc. - -Return a parent directory with a stack*.y[a]ml file, or the -directory returned by \"stack path --project-root\"." - (or - (when (buffer-file-name) - (flycheck--locate-dominating-file-matching - (file-name-directory (buffer-file-name)) - (rx "stack" (* any) "." (or "yml" "yaml") eos))) - (-when-let* ((stack (funcall flycheck-executable-find "stack")) - (output (ignore-errors - (process-lines stack - "--no-install-ghc" - "path" "--project-root"))) - (stack-dir (car output))) - (and (file-directory-p stack-dir) stack-dir)))) - -(defun flycheck-haskell--ghc-find-default-directory (_checker) - "Find a parent directory containing a cabal or package.yaml file." - (when (buffer-file-name) - (flycheck--locate-dominating-file-matching - (file-name-directory (buffer-file-name)) - "\\.cabal\\'\\|\\`package\\.yaml\\'"))) - -(flycheck-define-checker haskell-stack-ghc - "A Haskell syntax and type checker using `stack ghc'. - -See URL `https://github.com/commercialhaskell/stack'." - :command ("stack" - "--no-install-ghc" - (option "--stack-yaml" flycheck-ghc-stack-project-file) - (option-flag "--nix" flycheck-ghc-stack-use-nix) - "ghc" "--" "-Wall" "-no-link" - "-outputdir" (eval (flycheck-haskell-ghc-cache-directory)) - (option-list "-X" flycheck-ghc-language-extensions concat) - (option-list "-i" flycheck-ghc-search-path concat) - (eval (concat - "-i" - (flycheck-module-root-directory - (flycheck-find-in-buffer flycheck-haskell-module-re)))) - (eval flycheck-ghc-args) - "-x" (eval - (pcase major-mode - (`haskell-mode "hs") - (`haskell-literate-mode "lhs"))) - source) - :error-patterns - ((warning line-start (file-name) ":" line ":" column ":" - (or " " "\n ") (in "Ww") "arning:" - (optional " " "[" (id (one-or-more not-newline)) "]") - (optional "\n") - (message - (one-or-more " ") (one-or-more not-newline) - (zero-or-more "\n" - (one-or-more " ") - (one-or-more (not (any ?\n ?|))))) - line-end) - (error line-start (file-name) ":" line ":" column ":" (optional " error:") - (or (message (one-or-more not-newline)) - (and "\n" - (message - (one-or-more " ") (one-or-more not-newline) - (zero-or-more "\n" - (one-or-more " ") - (one-or-more (not (any ?\n ?|))))))) - line-end)) - :error-filter - (lambda (errors) - (flycheck-sanitize-errors (flycheck-dedent-error-messages errors))) - :modes (haskell-mode haskell-literate-mode) - :next-checkers ((warning . haskell-hlint)) - :working-directory (lambda (_) - (flycheck-haskell--find-stack-default-directory)) - :enabled flycheck-haskell--find-stack-default-directory - :verify (lambda (_) - (let* ((stack (flycheck-haskell--find-stack-default-directory))) - (list - (flycheck-verification-result-new - :label "stack config" - :message (or stack "Not found") - :face (if stack 'success '(bold error))))))) - -(flycheck-define-checker haskell-ghc - "A Haskell syntax and type checker using ghc. - -See URL `https://www.haskell.org/ghc/'." - :command ("ghc" "-Wall" "-no-link" - "-outputdir" (eval (flycheck-haskell-ghc-cache-directory)) - (option-flag "-no-user-package-db" - flycheck-ghc-no-user-package-database) - (option-list "-package-db" flycheck-ghc-package-databases) - (option-list "-i" flycheck-ghc-search-path concat) - ;; Include the parent directory of the current module tree, to - ;; properly resolve local imports - (eval (concat - "-i" - (flycheck-module-root-directory - (flycheck-find-in-buffer flycheck-haskell-module-re)))) - (option-list "-X" flycheck-ghc-language-extensions concat) - (eval flycheck-ghc-args) - "-x" (eval - (pcase major-mode - (`haskell-mode "hs") - (`haskell-literate-mode "lhs"))) - source) - :error-patterns - ((warning line-start (file-name) ":" line ":" column ":" - (or " " "\n ") (in "Ww") "arning:" - (optional " " "[" (id (one-or-more not-newline)) "]") - (optional "\n") - (message - (one-or-more " ") (one-or-more not-newline) - (zero-or-more "\n" - (one-or-more " ") - (one-or-more (not (any ?\n ?|))))) - line-end) - (error line-start (file-name) ":" line ":" column ":" (optional " error:") - (or (message (one-or-more not-newline)) - (and "\n" - (message - (one-or-more " ") (one-or-more not-newline) - (zero-or-more "\n" - (one-or-more " ") - (one-or-more (not (any ?\n ?|))))))) - line-end)) - :error-filter - (lambda (errors) - (flycheck-sanitize-errors (flycheck-dedent-error-messages errors))) - :modes (haskell-mode haskell-literate-mode) - :next-checkers ((warning . haskell-hlint)) - :working-directory flycheck-haskell--ghc-find-default-directory) - -(flycheck-def-config-file-var flycheck-hlintrc haskell-hlint "HLint.hs") - -(flycheck-def-args-var flycheck-hlint-args haskell-hlint - :package-version '(flycheck . "0.25")) - -(flycheck-def-option-var flycheck-hlint-language-extensions - nil haskell-hlint - "Extensions list to enable for hlint. - -The value of this variable is a list of strings, where each -string is a name of extension to enable in -hlint (e.g. \"QuasiQuotes\")." - :type '(repeat :tag "Extensions" (string :tag "Extension")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.24")) - -(flycheck-def-option-var flycheck-hlint-ignore-rules - nil haskell-hlint - "Ignore rules list for hlint checks. - -The value of this variable is a list of strings, where each -string is an ignore rule (e.g. \"Use fmap\")." - :type '(repeat :tag "Ignore rules" (string :tag "Ignore rule")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.24")) - -(flycheck-def-option-var flycheck-hlint-hint-packages - nil haskell-hlint - "Hint packages to include for hlint checks. - -The value of this variable is a list of strings, where each -string is a default hint package (e.g. (\"Generalise\" -\"Default\" \"Dollar\"))." - :type '(repeat :tag "Hint packages" (string :tag "Hint package")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.24")) - -(flycheck-define-checker haskell-hlint - "A Haskell style checker using hlint. - -See URL `https://github.com/ndmitchell/hlint'." - :command ("hlint" - (option-list "-X" flycheck-hlint-language-extensions concat) - (option-list "-i=" flycheck-hlint-ignore-rules concat) - (option-list "-h" flycheck-hlint-hint-packages concat) - (config-file "-h" flycheck-hlintrc) - (eval flycheck-hlint-args) - source-inplace) - :error-patterns - ((info line-start - (file-name) ":" line ":" column (optional "-" end-column) - ": Suggestion: " - (message (one-or-more (and (one-or-more (not (any ?\n))) ?\n))) - line-end) - (warning line-start - (file-name) ":" line ":" column (optional "-" end-column) - ": Warning: " - (message (one-or-more (and (one-or-more (not (any ?\n))) ?\n))) - line-end) - (error line-start - (file-name) ":" line ":" column (optional "-" end-column) - ": Error: " - (message (one-or-more (and (one-or-more (not (any ?\n))) ?\n))) - line-end)) - :modes (haskell-mode haskell-literate-mode)) - -(flycheck-def-config-file-var flycheck-tidyrc html-tidy ".tidyrc") - -(flycheck-define-checker html-tidy - "A HTML syntax and style checker using Tidy. - -See URL `https://github.com/htacg/tidy-html5'." - :command ("tidy" (config-file "-config" flycheck-tidyrc) - "-lang" "en" - "-e" "-q") - :standard-input t - :error-patterns - ((error line-start - "line " line - " column " column - " - Error: " (message) line-end) - (warning line-start - "line " line - " column " column - " - Warning: " (message) line-end)) - :modes (html-mode mhtml-mode nxhtml-mode)) - -(flycheck-def-config-file-var flycheck-jshintrc javascript-jshint ".jshintrc") - -(flycheck-def-option-var flycheck-jshint-extract-javascript nil - javascript-jshint - "Whether jshint should extract Javascript from HTML. - -If nil no extract rule is given to jshint. If `auto' only -extract Javascript if a HTML file is detected. If `always' or -`never' extract Javascript always or never respectively. - -Refer to the jshint manual at the URL -`http://jshint.com/docs/cli/#flags' for more information." - :type - '(choice (const :tag "No extraction rule" nil) - (const :tag "Try to extract Javascript when detecting HTML files" - auto) - (const :tag "Always try to extract Javascript" always) - (const :tag "Never try to extract Javascript" never)) - :safe #'symbolp - :package-version '(flycheck . "26")) - -(flycheck-define-checker javascript-jshint - "A Javascript syntax and style checker using jshint. - -See URL `http://www.jshint.com'." - :command ("jshint" "--reporter=checkstyle" - "--filename" source-original - (config-file "--config" flycheck-jshintrc) - (option "--extract=" flycheck-jshint-extract-javascript - concat flycheck-option-symbol) - "-") - :standard-input t - :error-parser flycheck-parse-checkstyle - :error-filter - (lambda (errors) - (flycheck-remove-error-file-names - "stdin" (flycheck-dequalify-error-ids errors))) - :modes (js-mode js2-mode js3-mode rjsx-mode)) - -(flycheck-def-args-var flycheck-eslint-args javascript-eslint - :package-version '(flycheck . "32")) - -(flycheck-def-option-var flycheck-eslint-rules-directories nil javascript-eslint - "A list of directories with custom rules for ESLint. - -The value of this variable is a list of strings, where each -string is a directory with custom rules for ESLint. - -Refer to the ESLint manual at URL -`http://eslint.org/docs/user-guide/command-line-interface#--rulesdir' -for more information about the custom directories." - :type '(repeat (directory :tag "Custom rules directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "29")) - -(defun flycheck-eslint-config-exists-p () - "Whether there is a valid eslint config for the current buffer." - (eql 0 (flycheck-call-checker-process - 'javascript-eslint nil nil nil - "--print-config" (or buffer-file-name "index.js")))) - -(defun flycheck-parse-eslint (output checker buffer) - "Parse ESLint errors/warnings from JSON OUTPUT. - -CHECKER and BUFFER denote the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `https://eslint.org' for more information about ESLint." - (mapcar (lambda (err) - (let-alist err - (flycheck-error-new-at - .line - .column - (pcase .severity - (2 'error) - (1 'warning) - (_ 'warning)) - .message - :id .ruleId - :checker checker - :buffer buffer - :filename (buffer-file-name buffer) - :end-line .endLine - :end-column .endColumn))) - (let-alist (caar (flycheck-parse-json output)) - .messages))) - -(defun flycheck-eslint--find-working-directory (_checker) - "Look for a working directory to run ESLint CHECKER in. - -This will be the directory that contains the `node_modules' -directory. If no such directory is found in the directory -hierarchy, it looks first for `.eslintignore' and then for -`.eslintrc' files to detect the project root." - (let* ((regex-config (concat "\\`\\.eslintrc" - "\\(\\.\\(js\\|ya?ml\\|json\\)\\)?\\'"))) - (when buffer-file-name - (or (locate-dominating-file buffer-file-name "node_modules") - (locate-dominating-file buffer-file-name ".eslintignore") - (locate-dominating-file - (file-name-directory buffer-file-name) - (lambda (directory) - (> (length (directory-files directory nil regex-config t)) 0))))))) - -(flycheck-define-checker javascript-eslint - "A Javascript syntax and style checker using eslint. - -See URL `https://eslint.org/'." - :command ("eslint" "--format=json" - (option-list "--rulesdir" flycheck-eslint-rules-directories) - (eval flycheck-eslint-args) - "--stdin" "--stdin-filename" source-original) - :standard-input t - :error-parser flycheck-parse-eslint - :enabled (lambda () (flycheck-eslint-config-exists-p)) - :modes (js-mode js-jsx-mode js2-mode js2-jsx-mode js3-mode rjsx-mode - typescript-mode) - :working-directory flycheck-eslint--find-working-directory - :verify - (lambda (_) - (let* ((default-directory - (flycheck-compute-working-directory 'javascript-eslint)) - (have-config (flycheck-eslint-config-exists-p))) - (list - (flycheck-verification-result-new - :label "config file" - :message (if have-config "found" "missing or incorrect") - :face (if have-config 'success '(bold error)))))) - :error-explainer - (lambda (err) - (let ((error-code (flycheck-error-id err)) - (url "https://eslint.org/docs/rules/%s")) - (and error-code - ;; skip non-builtin rules - (not ;; `seq-contains-p' is only in seq >= 2.21 - (with-no-warnings (seq-contains error-code ?/))) - `(url . ,(format url error-code)))))) - -(flycheck-define-checker javascript-standard - "A Javascript code and style checker for the (Semi-)Standard Style. - -This checker works with `standard' and `semistandard', defaulting -to the former. To use it with the latter, set -`flycheck-javascript-standard-executable' to `semistandard'. - -See URL `https://github.com/standard/standard' and URL -`https://github.com/Flet/semistandard'." - :command ("standard" "--stdin") - :standard-input t - :error-patterns - ((error line-start " :" line ":" column ":" (message) line-end)) - :modes (js-mode js-jsx-mode js2-mode js2-jsx-mode js3-mode rjsx-mode)) - -(flycheck-define-checker json-jsonlint - "A JSON syntax and style checker using jsonlint. - -See URL `https://github.com/zaach/jsonlint'." - ;; We can't use standard input for jsonlint, because it doesn't output errors - ;; anymore when using -c -q with standard input :/ - :command ("jsonlint" "-c" "-q" source) - :error-patterns - ((error line-start - (file-name) - ": line " line - ", col " column ", " - (message) line-end)) - :error-filter - (lambda (errors) - (flycheck-sanitize-errors (flycheck-increment-error-columns errors))) - :modes json-mode) - -(flycheck-define-checker json-python-json - "A JSON syntax checker using Python json.tool module. - -See URL `https://docs.python.org/3.5/library/json.html#command-line-interface'." - :command ("python3" "-m" "json.tool" source - ;; Send the pretty-printed output to the null device - null-device) - :error-patterns - ((error line-start - (message) ": line " line " column " column - ;; Ignore the rest of the line which shows the char position. - (one-or-more not-newline) - line-end)) - :modes json-mode - ;; The JSON parser chokes if the buffer is empty and has no JSON inside - :predicate flycheck-buffer-nonempty-p) - -(flycheck-define-checker json-jq - "JSON checker using the jq tool. - -This checker accepts multiple consecutive JSON values in a -single input, which is useful for jsonlines data. - -See URL `https://stedolan.github.io/jq/'." - :command ("jq" "." source null-device) - ;; Example error message: - ;; parse error: Expected another key-value pair at line 3, column 1 - :error-patterns - ((error line-start - (optional "parse error: ") - (message) "at line " line ", column " column - (zero-or-more not-newline) line-end)) - :modes json-mode) - -(flycheck-define-checker jsonnet - "A Jsonnet syntax checker using the jsonnet binary. - -See URL `https://jsonnet.org'." - :command ("jsonnet" source-inplace) - :error-patterns - ((error line-start "STATIC ERROR: " (file-name) ":" - (or (seq line ":" column (zero-or-one (seq "-" end-column))) - (seq "(" line ":" column ")" "-" - "(" end-line ":" end-column ")")) - ": " (message) line-end) - (error line-start "RUNTIME ERROR: " (message) "\n" - (? "\t" (file-name) ":" ;; first line of the backtrace - (or (seq line ":" column (zero-or-one (seq "-" end-column))) - (seq "(" line ":" column ")" "-" - "(" end-line ":" end-column ")"))))) - :error-filter - (lambda (errs) - ;; Some errors are missing line numbers. See URL - ;; `https://github.com/google/jsonnet/issues/786'. - (dolist (err errs) - (unless (flycheck-error-line err) - (setf (flycheck-error-line err) 1))) - (flycheck-sanitize-errors errs)) - :modes jsonnet-mode) - -(flycheck-define-checker less - "A LESS syntax checker using lessc. - -Requires lessc 1.4 or newer. - -See URL `http://lesscss.org'." - :command ("lessc" "--lint" "--no-color" - "-") - :standard-input t - :error-patterns - ((error line-start (one-or-more word) ":" - (message) - " in - on line " line - ", column " column ":" - line-end)) - :modes less-css-mode) - -(flycheck-define-checker less-stylelint - "A LESS syntax and style checker using stylelint. - -See URL `http://stylelint.io/'." - :command ("stylelint" - (eval flycheck-stylelint-args) - "--syntax" "less" - (option-flag "--quiet" flycheck-stylelint-quiet) - (config-file "--config" flycheck-stylelintrc)) - :standard-input t - :error-parser flycheck-parse-stylelint - :predicate flycheck-buffer-nonempty-p - :modes (less-css-mode)) - -(flycheck-define-checker llvm-llc - "Flycheck LLVM IR checker using llc. - -See URL `http://llvm.org/docs/CommandGuide/llc.html'." - :command ("llc" "-o" null-device source) - :error-patterns - ((error line-start - ;; llc prints the executable path - (zero-or-one (minimal-match (one-or-more not-newline)) ": ") - (file-name) ":" line ":" column ": error: " (message) - line-end)) - :error-filter - (lambda (errors) - ;; sanitize errors occurring in inline assembly - (flycheck-sanitize-errors - (flycheck-remove-error-file-names "" errors))) - :modes llvm-mode) - -(flycheck-def-config-file-var flycheck-luacheckrc lua-luacheck ".luacheckrc") - -(flycheck-def-option-var flycheck-luacheck-standards nil lua-luacheck - "The standards to use in luacheck. - -The value of this variable is either a list of strings denoting -the standards to use, or nil to pass nothing to luacheck. When -non-nil, pass the standards via one or more `--std' options." - :type '(choice (const :tag "Default" nil) - (repeat :tag "Custom standards" - (string :tag "Standard name"))) - :safe #'flycheck-string-list-p) -(make-variable-buffer-local 'flycheck-luacheck-standards) - -(flycheck-define-checker lua-luacheck - "A Lua syntax checker using luacheck. - -See URL `https://github.com/mpeterv/luacheck'." - :command ("luacheck" - "--formatter" "plain" - "--codes" ; Show warning codes - "--no-color" - (option-list "--std" flycheck-luacheck-standards) - (config-file "--config" flycheck-luacheckrc) - "--filename" source-original - ;; Read from standard input - "-") - :standard-input t - :error-patterns - ((warning line-start - (optional (file-name)) - ":" line ":" column - ": (" (id "W" (one-or-more digit)) ") " - (message) line-end) - (error line-start - (optional (file-name)) - ":" line ":" column ":" - ;; `luacheck' before 0.11.0 did not output codes for errors, hence - ;; the ID is optional here - (optional " (" (id "E" (one-or-more digit)) ") ") - (message) line-end)) - :modes lua-mode) - -(flycheck-define-checker lua - "A Lua syntax checker using the Lua compiler. - -See URL `http://www.lua.org/'." - :command ("luac" "-p" "-") - :standard-input t - :error-patterns - ((error line-start - ;; Skip the name of the luac executable. - (minimal-match (zero-or-more not-newline)) - ": stdin:" line ": " (message) line-end)) - :modes lua-mode) - -(flycheck-define-checker opam - "A Opam syntax and style checker using opam lint. - -See URL `https://opam.ocaml.org/doc/man/opam-lint.html'." - :command ("opam" "lint" "-") - :standard-input t - :error-patterns - ((error line-start ; syntax error - (one-or-more space) "error " (id ?2) - ": File format error" - (or (and " at line " line ", column " column ": " (message)) - (and ": " (message))) - line-end) - (error line-start - (one-or-more space) "error " (id ?3) - (minimal-match (zero-or-more not-newline)) - "at line " line ", column " column ": " (message) - line-end) - (error line-start - (one-or-more space) "error " (id (one-or-more num)) - ": " (message (one-or-more not-newline)) - line-end) - (warning line-start - (one-or-more space) "warning " (id (one-or-more num)) - ": " (message) - line-end)) - :error-filter - (lambda (errors) - (flycheck-increment-error-columns - (flycheck-fill-empty-line-numbers errors))) - :modes tuareg-opam-mode) - -(flycheck-def-option-var flycheck-perl-include-path nil perl - "A list of include directories for Perl. - -The value of this variable is a list of strings, where each -string is a directory to add to the include path of Perl. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Include directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.24")) - -(flycheck-def-option-var flycheck-perl-module-list nil perl - "A list of modules to use for Perl. - -The value of this variable is a list of strings, where each -string is a module to 'use' in Perl." - :type '(repeat :tag "Module") - :safe #'flycheck-string-list-p - :package-version '(flycheck . "32")) - -(flycheck-define-checker perl - "A Perl syntax checker using the Perl interpreter. - -See URL `https://www.perl.org'." - :command ("perl" "-w" "-c" - (option-list "-I" flycheck-perl-include-path) - (option-list "-M" flycheck-perl-module-list concat)) - :standard-input t - :error-patterns - ((error line-start (minimal-match (message)) - " at - line " line - (or "." (and ", " (zero-or-more not-newline))) line-end)) - :modes (perl-mode cperl-mode) - :next-checkers (perl-perlcritic)) - -(flycheck-def-option-var flycheck-perlcritic-severity nil perl-perlcritic - "The message severity for Perl Critic. - -The value of this variable is a severity level as integer, for -the `--severity' option to Perl Critic." - :type '(integer :tag "Severity level") - :safe #'integerp - :package-version '(flycheck . "0.18")) - -(flycheck-def-option-var flycheck-perlcritic-theme nil perl-perlcritic - "The theme expression for Perl Critic. - -The value of this variable is passed as the `--theme' option to -`Perl::Critic'. See the documentation of `Perl::Critic' for -details." - :type '(choice (const :tag "None" nil) - (string :tag "Theme expression")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "32-csv")) - -(flycheck-def-config-file-var flycheck-perlcriticrc perl-perlcritic - ".perlcriticrc" - :package-version '(flycheck . "26")) - -(flycheck-define-checker perl-perlcritic - "A Perl syntax checker using Perl::Critic. - -See URL `https://metacpan.org/pod/Perl::Critic'." - :command ("perlcritic" "--no-color" "--verbose" "%f/%l/%c/%s/%p/%m (%e)\n" - (config-file "--profile" flycheck-perlcriticrc) - (option "--severity" flycheck-perlcritic-severity nil - flycheck-option-int) - (option "--theme" flycheck-perlcritic-theme)) - :standard-input t - :error-patterns - ((info line-start - "STDIN/" line "/" column "/" (any "1") "/" - (id (one-or-more (not (any "/")))) "/" (message) - line-end) - (warning line-start - "STDIN/" line "/" column "/" (any "234") "/" - (id (one-or-more (not (any "/")))) "/" (message) - line-end) - (error line-start - "STDIN/" line "/" column "/" (any "5") "/" - (id (one-or-more (not (any "/")))) "/" (message) - line-end)) - :modes (cperl-mode perl-mode)) - -(flycheck-define-checker php - "A PHP syntax checker using the PHP command line interpreter. - -See URL `http://php.net/manual/en/features.commandline.php'." - :command ("php" "-l" "-d" "error_reporting=E_ALL" "-d" "display_errors=1" - "-d" "log_errors=0" source) - :error-patterns - ((error line-start (or "Parse" "Fatal" "syntax") " error" (any ":" ",") " " - (message) " in " (file-name) " on line " line line-end)) - :modes (php-mode php+-mode) - :next-checkers ((warning . php-phpmd) - (warning . php-phpcs))) - -(flycheck-def-option-var flycheck-phpmd-rulesets - '("cleancode" "codesize" "controversial" "design" "naming" "unusedcode") - php-phpmd - "The rule sets for PHP Mess Detector. - -Set default rule sets and custom rule set files. - -See section \"Using multiple rule sets\" in the PHP Mess Detector -manual at URL `https://phpmd.org/documentation/index.html'." - :type '(repeat :tag "rule sets" - (string :tag "A filename or rule set")) - :safe #'flycheck-string-list-p) - -(flycheck-define-checker php-phpmd - "A PHP style checker using PHP Mess Detector. - -See URL `https://phpmd.org/'." - :command ("phpmd" source "xml" - (eval (flycheck-option-comma-separated-list - flycheck-phpmd-rulesets))) - :error-parser flycheck-parse-phpmd - :modes (php-mode php+-mode) - :next-checkers (php-phpcs)) - -(flycheck-def-option-var flycheck-phpcs-standard nil php-phpcs - "The coding standard for PHP CodeSniffer. - -When nil, use the default standard from the global PHP -CodeSniffer configuration. When set to a string, pass the string -to PHP CodeSniffer which will interpret it as name as a standard, -or as path to a standard specification." - :type '(choice (const :tag "Default standard" nil) - (string :tag "Standard name or file")) - :safe #'flycheck-string-or-nil-p) - -(flycheck-define-checker php-phpcs - "A PHP style checker using PHP Code Sniffer. - -Needs PHP Code Sniffer 2.6 or newer. - -See URL `http://pear.php.net/package/PHP_CodeSniffer/'." - :command ("phpcs" "--report=checkstyle" - ;; Use -q flag to force quiet mode - ;; Quiet mode prevents errors from extra output when phpcs has - ;; been configured with show_progress enabled - "-q" - (option "--standard=" flycheck-phpcs-standard concat) - ;; Some files are not detected correctly - ;; so it is necessary to pass the extension. - (eval - (-when-let* ((fname buffer-file-name) - (ext (file-name-extension fname))) - (concat "--extensions=" ext))) - - ;; Pass original file name to phpcs. We need to concat explicitly - ;; here, because phpcs really insists to get option and argument as - ;; a single command line argument :| - (eval (when (buffer-file-name) - (concat "--stdin-path=" (buffer-file-name)))) - ;; Read from standard input - "-") - :standard-input t - :error-parser flycheck-parse-checkstyle - :error-filter - (lambda (errors) - (flycheck-sanitize-errors - (flycheck-remove-error-file-names "STDIN" errors))) - :modes (php-mode php+-mode) - ;; phpcs seems to choke on empty standard input, hence skip phpcs if the - ;; buffer is empty, see https://github.com/flycheck/flycheck/issues/907 - :predicate flycheck-buffer-nonempty-p) - -(flycheck-define-checker processing - "Processing command line tool. - -See https://github.com/processing/processing/wiki/Command-Line" - :command ("processing-java" "--force" - ;; Don't change the order of these arguments, processing is pretty - ;; picky - (eval (concat "--sketch=" (file-name-directory (buffer-file-name)))) - (eval (concat "--output=" (flycheck-temp-dir-system))) - "--build") - :error-patterns - ((error line-start (file-name) ":" line ":" column - (zero-or-more (or digit ":")) (message) line-end)) - :modes processing-mode - ;; This syntax checker needs a file name - :predicate (lambda () (buffer-file-name))) - -(defun flycheck-proselint-parse-errors (output checker buffer) - "Parse proselint json output errors from OUTPUT. - -CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `http://proselint.com/' for more information about proselint." - (mapcar (lambda (err) - (let-alist err - (flycheck-error-new-at-pos - .start - (pcase .severity - (`"suggestion" 'info) - (`"warning" 'warning) - (`"error" 'error) - ;; Default to error - (_ 'error)) - .message - :id .check - :buffer buffer - :checker checker - ;; See https://github.com/amperser/proselint/issues/1048 - :end-pos .end))) - (let-alist (car (flycheck-parse-json output)) - .data.errors))) - -(flycheck-define-checker proselint - "Flycheck checker using Proselint. - -See URL `http://proselint.com/'." - :command ("proselint" "--json" "-") - :standard-input t - :error-parser flycheck-proselint-parse-errors - :modes (text-mode markdown-mode gfm-mode message-mode org-mode)) - -(flycheck-def-option-var flycheck-protoc-import-path nil protobuf-protoc - "A list of directories to resolve import directives. - -The value of this variable is a list of strings, where each -string is a directory to add to the import path. Relative paths -are relative to the file being checked." - :type '(repeat (directory :tag "Import directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "32")) - -(flycheck-define-checker protobuf-protoc - "A protobuf syntax checker using the protoc compiler. - -See URL `https://developers.google.com/protocol-buffers/'." - :command ("protoc" "--error_format" "gcc" - (eval (concat "--java_out=" (flycheck-temp-dir-system))) - ;; Add the current directory to resolve imports - (eval (concat "--proto_path=" - (file-name-directory (buffer-file-name)))) - ;; Add other import paths; this needs to be after the current - ;; directory to produce the right output. See URL - ;; `https://github.com/flycheck/flycheck/pull/1655' - (option-list "--proto_path=" flycheck-protoc-import-path concat) - source-inplace) - :error-patterns - ((info line-start (file-name) ":" line ":" column - ": note: " (message) line-end) - (error line-start (file-name) ":" line ":" column - ": " (message) line-end) - (error line-start - (message "In file included from") " " (file-name) ":" line ":" - column ":" line-end)) - :modes protobuf-mode - :predicate (lambda () (buffer-file-name))) - -(defun flycheck-prototool-project-root (&optional _checker) - "Return the nearest directory holding the prototool.yaml configuration." - (and buffer-file-name - (locate-dominating-file buffer-file-name "prototool.yaml"))) - -(flycheck-define-checker protobuf-prototool - "A protobuf syntax checker using prototool. - -See URL `https://github.com/uber/prototool'." - :command ("prototool" "lint" source-original) - :error-patterns - ((warning line-start (file-name) ":" line ":" column ":" (message) line-end)) - :modes protobuf-mode - :enabled flycheck-prototool-project-root - :predicate flycheck-buffer-saved-p) - -(flycheck-define-checker pug - "A Pug syntax checker using the pug compiler. - -See URL `https://pugjs.org/'." - :command ("pug" "-p" (eval (expand-file-name (buffer-file-name)))) - :standard-input t - :error-patterns - ;; errors with includes/extends (e.g. missing files) - ((error "Error: " (message) (zero-or-more not-newline) "\n" - (zero-or-more not-newline) "at " - (zero-or-more not-newline) " line " line) - ;; error when placing anything other than a mixin or - ;; block at the top-level of an extended template - ;; also unknown filters - (error line-start "Error: " (file-name) ":" - line ":" column "\n\n" (message) line-end) - ;; syntax/runtime errors (e.g. type errors, bad indentation, etc.) - (error line-start - (optional "Type") "Error: " (file-name) ":" - line (optional ":" column) - (zero-or-more not-newline) "\n" - (one-or-more (or (zero-or-more not-newline) "|" - (zero-or-more not-newline) "\n") - (zero-or-more "-") (zero-or-more not-newline) "|" - (zero-or-more not-newline) "\n") - (zero-or-more not-newline) "\n" - (one-or-more - (zero-or-more not-newline) "|" - (zero-or-more not-newline) "\n") - (zero-or-more not-newline) "\n" - (message) - line-end)) - :modes pug-mode) - -(flycheck-define-checker puppet-parser - "A Puppet DSL syntax checker using puppet's own parser. - -See URL `https://puppet.com/'." - :command ("puppet" "parser" "validate" "--color=false") - :standard-input t - :error-patterns - ( - ;; Patterns for Puppet 4 - (error line-start "Error: Could not parse for environment " - (one-or-more (in "a-z" "0-9" "_")) ":" - (message) "(line: " line ", column: " column ")" line-end) - ;; Errors from Puppet < 4 - (error line-start "Error: Could not parse for environment " - (one-or-more (in "a-z" "0-9" "_")) ":" - (message (minimal-match (one-or-more anything))) - " at line " line line-end) - (error line-start - ;; Skip over the path of the Puppet executable - (minimal-match (zero-or-more not-newline)) - ": Could not parse for environment " (one-or-more word) - ": " (message (minimal-match (zero-or-more anything))) - " at " (file-name "/" (zero-or-more not-newline)) ":" line line-end)) - :modes puppet-mode - :next-checkers ((warning . puppet-lint))) - -(flycheck-def-config-file-var flycheck-puppet-lint-rc puppet-lint - ".puppet-lint.rc" - :package-version '(flycheck . "26")) - -(flycheck-def-option-var flycheck-puppet-lint-disabled-checks nil puppet-lint - "Disabled checkers for `puppet-lint'. - -The value of this variable is a list of strings, where each -string is the name of a check to disable (e.g. \"80chars\" or -\"double_quoted_strings\"). - -See URL `http://puppet-lint.com/checks/' for a list of all checks -and their names." - :type '(repeat (string :tag "Check Name")) - :package-version '(flycheck . "26")) - -(defun flycheck-puppet-lint-disabled-arg-name (check) - "Create an argument to disable a puppetlint CHECK." - (concat "--no-" check "-check")) - -(flycheck-define-checker puppet-lint - "A Puppet DSL style checker using puppet-lint. - -See URL `http://puppet-lint.com/'." - ;; We must check the original file, because Puppetlint is quite picky on the - ;; names of files and there place in the directory structure, to comply with - ;; Puppet's autoload directory layout. For instance, a class foo::bar is - ;; required to be in a file foo/bar.pp. Any other place, such as a Flycheck - ;; temporary file will cause an error. - :command ("puppet-lint" - (config-file "--config" flycheck-puppet-lint-rc) - "--log-format" - "%{path}:%{line}:%{kind}: %{message} (%{check})" - (option-list "" flycheck-puppet-lint-disabled-checks concat - flycheck-puppet-lint-disabled-arg-name) - source-original) - :error-patterns - ((warning line-start (file-name) ":" line ":warning: " (message) line-end) - (error line-start (file-name) ":" line ":error: " (message) line-end)) - :modes puppet-mode - ;; Since we check the original file, we can only use this syntax checker if - ;; the buffer is actually linked to a file, and if it is not modified. - :predicate flycheck-buffer-saved-p) - -(defun flycheck-python-run-snippet (checker snippet) - "Run a python SNIPPET and return the output. - -CHECKER's executable is assumed to be a Python REPL." - (-when-let (output (flycheck-call-checker-process-for-output - checker nil nil "-c" snippet)) - (string-trim output))) - -(defun flycheck-python-get-path (checker) - "Compute the current Python path (CHECKER is a Python REPL) ." - (flycheck-python-run-snippet checker "import sys; print(sys.path[1:])")) - -(defun flycheck-python-find-module (checker module) - "Check if a Python MODULE is available (CHECKER is a Python REPL)." - (flycheck-python-run-snippet - checker (concat "import sys; sys.path.pop(0);" - (format "import %s; print(%s.__file__)" module module)))) - -(defun flycheck-python-needs-module-p (checker) - "Determines whether CHECKER needs to be invoked through Python. - -Previous versions of Flycheck called pylint and flake8 directly, -while new version call them through `python -c'. This check -ensures that we don't break existing code; it also allows people -who use virtualenvs to run globally-installed checkers." - (not (string-match-p (rx (or "pylint" "pylint3" "flake8") - (or "-script.pyw" ".exe" ".bat" "") - eos) - (flycheck-checker-executable checker)))) - -(defun flycheck-python-verify-module (checker module) - "Verify that a Python MODULE is available. - -Return nil if CHECKER's executable is not a Python REPL. This -function's is suitable for a checker's :verify." - (when (flycheck-python-needs-module-p checker) - (let ((mod-path (flycheck-python-find-module checker module))) - (list (flycheck-verification-result-new - :label (format "`%s' module" module) - :message (if mod-path (format "Found at %S" mod-path) - (format "Missing; sys.path is %s" - (flycheck-python-get-path checker))) - :face (if mod-path 'success '(bold error))))))) - -(defun flycheck-python-module-args (checker module-name) - "Compute arguments to pass to CHECKER's executable to run MODULE-NAME. - -Return nil if CHECKER's executable is not a Python REPL. -Otherwise, return a list starting with -c (-m is not enough -because it adds the current directory to Python's path)." - (when (flycheck-python-needs-module-p checker) - `("-c" ,(concat "import sys;sys.path.pop(0);import runpy;" - (format "runpy.run_module(%S)" module-name))))) - -(flycheck-def-config-file-var flycheck-flake8rc python-flake8 ".flake8rc") - -(flycheck-def-option-var flycheck-flake8-error-level-alist - '(("^E9.*$" . error) ; Syntax errors from pep8 - ("^F82.*$" . error) ; undefined variables from pyflakes - ("^F83.*$" . error) ; Duplicate arguments from flake8 - ("^D.*$" . info) ; Docstring issues from flake8-pep257 - ("^N.*$" . info) ; Naming issues from pep8-naming - ) - python-flake8 - "An alist mapping flake8 error IDs to Flycheck error levels. - -Each item in this list is a cons cell `(PATTERN . LEVEL)' where -PATTERN is a regular expression matched against the error ID, and -LEVEL is a Flycheck error level symbol. - -Each PATTERN is matched in the order of appearance in this list -against the error ID. If it matches the ID, the level of the -corresponding error is set to LEVEL. An error that is not -matched by any PATTERN defaults to warning level. - -The default value of this option matches errors from flake8 -itself and from the following flake8 plugins: - -- pep8-naming -- flake8-pep257 - -You may add your own mappings to this option in order to support -further flake8 plugins." - :type '(repeat (cons (regexp :tag "Error ID pattern") - (symbol :tag "Error level"))) - :package-version '(flycheck . "0.22")) - -(flycheck-def-option-var flycheck-flake8-maximum-complexity nil python-flake8 - "The maximum McCabe complexity of methods. - -If nil, do not check the complexity of methods. If set to an -integer, report any complexity greater than the value of this -variable as warning. - -If set to an integer, this variable overrules any similar setting -in the configuration file denoted by `flycheck-flake8rc'." - :type '(choice (const :tag "Do not check McCabe complexity" nil) - (integer :tag "Maximum complexity")) - :safe #'integerp) - -(flycheck-def-option-var flycheck-flake8-maximum-line-length nil python-flake8 - "The maximum length of lines. - -If set to an integer, the value of this variable denotes the -maximum length of lines, overruling any similar setting in the -configuration file denoted by `flycheck-flake8rc'. An error will -be reported for any line longer than the value of this variable. - -If set to nil, use the maximum line length from the configuration -file denoted by `flycheck-flake8rc', or the PEP 8 recommendation -of 79 characters if there is no configuration with this setting." - :type '(choice (const :tag "Default value") - (integer :tag "Maximum line length in characters")) - :safe #'integerp) - -(defun flycheck-flake8-fix-error-level (err) - "Fix the error level of ERR. - -Update the error level of ERR according to -`flycheck-flake8-error-level-alist'." - (pcase-dolist (`(,pattern . ,level) flycheck-flake8-error-level-alist) - (when (string-match-p pattern (flycheck-error-id err)) - (setf (flycheck-error-level err) level))) - err) - -(defun flycheck-flake8--find-project-root (_checker) - "Find setup.cfg in a parent directory of the current buffer." - ;; This is a workaround for `https://gitlab.com/pycqa/flake8/issues/517'; see - ;; also `https://github.com/flycheck/flycheck/issues/1722' - (locate-dominating-file (or buffer-file-name default-directory) "setup.cfg")) - -(flycheck-define-checker python-flake8 - "A Python syntax and style checker using Flake8. - -Requires Flake8 3.0 or newer. See URL -`https://flake8.readthedocs.io/'." - ;; Not calling flake8 directly makes it easier to switch between different - ;; Python versions; see https://github.com/flycheck/flycheck/issues/1055. - :command ("python3" - (eval (flycheck-python-module-args 'python-flake8 "flake8")) - "--format=default" - (config-file "--append-config" flycheck-flake8rc) - (option "--max-complexity" flycheck-flake8-maximum-complexity nil - flycheck-option-int) - (option "--max-line-length" flycheck-flake8-maximum-line-length nil - flycheck-option-int) - (eval (when buffer-file-name - (concat "--stdin-display-name=" buffer-file-name))) - "-") - :standard-input t - :working-directory flycheck-flake8--find-project-root - :error-filter (lambda (errors) - (let ((errors (flycheck-sanitize-errors errors))) - (seq-map #'flycheck-flake8-fix-error-level errors))) - :error-patterns - ((warning line-start - (file-name) ":" line ":" (optional column ":") " " - (id (one-or-more (any alpha)) (one-or-more digit)) " " - (message (one-or-more not-newline)) - line-end)) - :enabled (lambda () - (or (not (flycheck-python-needs-module-p 'python-flake8)) - (flycheck-python-find-module 'python-flake8 "flake8"))) - :verify (lambda (_) (flycheck-python-verify-module 'python-flake8 "flake8")) - :modes python-mode - :next-checkers ((warning . python-pylint) - (warning . python-mypy))) - -(flycheck-def-config-file-var flycheck-pylintrc python-pylint ".pylintrc") - -(flycheck-def-option-var flycheck-pylint-use-symbolic-id t python-pylint - "Whether to use pylint message symbols or message codes. - -A pylint message has both an opaque identifying code (such as `F0401') and a -more meaningful symbolic code (such as `import-error'). This option governs -which should be used and reported to the user." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.25")) - -(defun flycheck-parse-pylint (output checker buffer) - "Parse JSON OUTPUT of CHECKER on BUFFER as Pylint errors." - (mapcar (lambda (err) - (let-alist err - ;; Pylint can return -1 as a line or a column, hence the call to - ;; `max'. See `https://github.com/flycheck/flycheck/issues/1383'. - (flycheck-error-new-at - (and .line (max .line 1)) - (and .column (max (1+ .column) 1)) - (pcase .type - ;; See "pylint/utils.py" - ((or "fatal" "error") 'error) - ((or "info" "convention") 'info) - ((or "warning" "refactor" _) 'warning)) - ;; Drop lines showing the error in context - (and (string-match (rx (*? nonl) eol) .message) - (match-string 0 .message)) - :id (if flycheck-pylint-use-symbolic-id .symbol .message-id) - :checker checker - :buffer buffer - :filename .path))) - (car (flycheck-parse-json output)))) - -(flycheck-define-checker python-pylint - "A Python syntax and style checker using Pylint. - -This syntax checker requires Pylint 1.0 or newer. - -See URL `https://www.pylint.org/'." - ;; --reports=n disables the scoring report. - ;; Not calling pylint directly makes it easier to switch between different - ;; Python versions; see https://github.com/flycheck/flycheck/issues/1055. - :command ("python3" - (eval (flycheck-python-module-args 'python-pylint "pylint")) - "--reports=n" - "--output-format=json" - (config-file "--rcfile=" flycheck-pylintrc concat) - ;; Need `source-inplace' for relative imports (e.g. `from .foo - ;; import bar'), see https://github.com/flycheck/flycheck/issues/280 - source-inplace) - :error-parser flycheck-parse-pylint - :enabled (lambda () - (or (not (flycheck-python-needs-module-p 'python-pylint)) - (flycheck-python-find-module 'python-pylint "pylint"))) - :verify (lambda (_) (flycheck-python-verify-module 'python-pylint "pylint")) - :error-explainer (lambda (err) - (-when-let (id (flycheck-error-id err)) - (apply - #'flycheck-call-checker-process-for-output - 'python-pylint nil t - (append - (flycheck-python-module-args 'python-pylint "pylint") - (list (format "--help-msg=%s" id)))))) - :modes python-mode - :next-checkers ((warning . python-mypy))) - -(flycheck-define-checker python-pycompile - "A Python syntax checker using Python's builtin compiler. - -See URL `https://docs.python.org/3.4/library/py_compile.html'." - :command ("python3" "-m" "py_compile" source) - :error-patterns - ;; Python 2.7 - ((error line-start " File \"" (file-name) "\", line " line "\n" - (>= 2 (zero-or-more not-newline) "\n") - "SyntaxError: " (message) line-end) - (error line-start "Sorry: IndentationError: " - (message) "(" (file-name) ", line " line ")" - line-end) - ;; 2.6 - (error line-start "SyntaxError: ('" (message (one-or-more (not (any "'")))) - "', ('" (file-name (one-or-more (not (any "'")))) "', " - line ", " column ", " (one-or-more not-newline) line-end)) - :modes python-mode - :next-checkers ((warning . python-mypy))) - -(defun flycheck-pyright--parse-error (output checker buffer) - "Parse pyright errors/warnings from JSON OUTPUT. -CHECKER and BUFFER denote the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively." - (seq-map - (lambda (err) - (let-alist err - (flycheck-error-new-at - (+ 1 .range.start.line) - (+ 1 .range.start.character) - (pcase .severity - ("error" 'error) - ("warning" 'warning) - (_ 'warning)) - .message - :end-line (+ 1 .range.end.line) - :end-column (+ 1 .range.end.character) - :checker checker - :buffer buffer - :filename (buffer-file-name buffer)))) - (cdr (nth 2 (car (flycheck-parse-json output)))))) - -(defun flycheck-pyright--find-project-root (_checker) - "Find project root by searching for pyright config file." - (locate-dominating-file - (or buffer-file-name default-directory) "pyrightconfig.json")) - -(flycheck-define-checker python-pyright - "Static type checker for Python - -See URL https://github.com/microsoft/pyright." - :command ("pyright" - "--outputjson" - source-inplace) - :working-directory flycheck-pyright--find-project-root - :error-parser flycheck-pyright--parse-error - :modes python-mode) - -(define-obsolete-variable-alias 'flycheck-python-mypy-ini - 'flycheck-python-mypy-config "32") - -(flycheck-def-config-file-var flycheck-python-mypy-config python-mypy - '("mypy.ini" "setup.cfg")) - -(flycheck-def-option-var flycheck-python-mypy-cache-dir nil python-mypy - "Directory used to write .mypy_cache directories." - :type '(choice - (const :tag "Write to the working directory" nil) - (const :tag "Never write .mypy_cache directories" null-device) - (string :tag "Path")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "32")) - -(flycheck-define-checker python-mypy - "Mypy syntax and type checker. Requires mypy>=0.580. - -See URL `http://mypy-lang.org/'." - :command ("mypy" - "--show-column-numbers" - (config-file "--config-file" flycheck-python-mypy-config) - (option "--cache-dir" flycheck-python-mypy-cache-dir) - source-original) - :error-patterns - ((error line-start (file-name) ":" line (optional ":" column) - ": error:" (message) line-end) - (warning line-start (file-name) ":" line (optional ":" column) - ": warning:" (message) line-end) - (info line-start (file-name) ":" line (optional ":" column) - ": note:" (message) line-end)) - :modes python-mode - ;; Ensure the file is saved, to work around - ;; https://github.com/python/mypy/issues/4746. - :predicate flycheck-buffer-saved-p) - -(flycheck-def-option-var flycheck-lintr-caching t r-lintr - "Whether to enable caching in lintr. - -By default, lintr caches all expressions in a file and re-checks -only those that have changed. Setting this option to nil -disables caching in case there are problems." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.23")) - -(flycheck-def-option-var flycheck-lintr-linters "default_linters" r-lintr - "Linters to use with lintr. - -The value of this variable is a string containing an R -expression, which selects linters for lintr." - :type 'string - :risky t - :package-version '(flycheck . "0.23")) - -(defun flycheck-r-has-lintr (checker) - "Whether CHECKER (R) has installed the `lintr' library." - (eql 0 (flycheck-call-checker-process - checker nil nil nil - "--slave" "--restore" "--no-save" "-e" - "library('lintr')"))) - -(flycheck-define-checker r-lintr - "An R style and syntax checker using the lintr package. - -See URL `https://github.com/jimhester/lintr'." - :command ("R" "--slave" "--restore" "--no-save" "-e" - (eval (concat - "library(lintr);" - "try(lint(commandArgs(TRUE)" - ", cache=" (if flycheck-lintr-caching "TRUE" "FALSE") - ", " flycheck-lintr-linters - "))")) - "--args" source) - :error-patterns - ((info line-start (file-name) ":" line ":" column ": style: " (message) - line-end) - (warning line-start (file-name) ":" line ":" column ": warning: " (message) - line-end) - (error line-start (file-name) ":" line ":" column ": error: " (message) - line-end)) - :modes (ess-mode ess-r-mode) - :predicate - ;; Don't check ESS files which do not contain R, and make sure that lintr is - ;; actually available - (lambda () - (and (equal ess-language "S") - (flycheck-r-has-lintr 'r-lintr))) - :verify (lambda (checker) - (let ((has-lintr (flycheck-r-has-lintr checker))) - (list - (flycheck-verification-result-new - :label "lintr library" - :message (if has-lintr "present" "missing") - :face (if has-lintr 'success '(bold error))))))) - -(defun flycheck-racket-has-expand-p (checker) - "Whether the executable of CHECKER provides the `expand' command." - (eql 0 (flycheck-call-checker-process checker nil nil nil "expand"))) - -(flycheck-define-checker racket - "A Racket syntax checker with `raco expand'. - -The `compiler-lib' racket package is required for this syntax -checker. - -See URL `https://racket-lang.org/'." - :command ("raco" "expand" source-inplace) - :predicate - (lambda () - (and (or (not (eq major-mode 'scheme-mode)) - ;; In `scheme-mode' we must check the current Scheme implementation - ;; being used - (and (boundp 'geiser-impl--implementation) - (eq geiser-impl--implementation 'racket))) - (flycheck-racket-has-expand-p 'racket))) - :verify - (lambda (checker) - (let ((has-expand (flycheck-racket-has-expand-p checker)) - (in-scheme-mode (eq major-mode 'scheme-mode)) - (geiser-impl (bound-and-true-p geiser-impl--implementation))) - (list - (flycheck-verification-result-new - :label "compiler-lib package" - :message (if has-expand "present" "missing") - :face (if has-expand 'success '(bold error))) - (flycheck-verification-result-new - :label "Geiser Implementation" - :message (cond - ((not in-scheme-mode) "Using Racket Mode") - ((eq geiser-impl 'racket) "Racket") - (geiser-impl (format "Other: %s" geiser-impl)) - (t "Geiser not active")) - :face (cond - ((or (not in-scheme-mode) (eq geiser-impl 'racket)) 'success) - (t '(bold error))))))) - :error-filter - (lambda (errors) - (flycheck-sanitize-errors - (flycheck-increment-error-columns - (seq-remove - (lambda (err) - (string-suffix-p - "/share/racket/pkgs/compiler-lib/compiler/commands/expand.rkt" - (flycheck-error-filename err))) - errors)))) - :error-patterns - ((error line-start (zero-or-more space) - (file-name) ":" line ":" column ":" (message) line-end)) - :modes (racket-mode scheme-mode)) - -(flycheck-define-checker rpm-rpmlint - "A RPM SPEC file syntax checker using rpmlint. - -See URL `https://github.com/rpm-software-management/rpmlint'." - :command ("rpmlint" source) - :error-patterns - ((error line-start - (file-name) ":" (optional line ":") " E: " (message) - line-end) - (warning line-start - (file-name) ":" (optional line ":") " W: " (message) - line-end)) - :error-filter - ;; rpmlint 1.1 outputs a spurious error for the temp file created by flycheck - (lambda (errors) - (dolist (err (seq-remove - (lambda (err) - (string-suffix-p "(none)" (flycheck-error-filename err))) - errors)) - ;; Add fake line numbers if they are missing in the lint output - (unless (flycheck-error-line err) - (setf (flycheck-error-line err) 1))) - errors) - :error-explainer - (lambda (error) - (-when-let* ((error-message (flycheck-error-message error)) - (message-id (save-match-data - (string-match "\\([^ ]+\\)" error-message) - (match-string 1 error-message)))) - (flycheck-call-checker-process-for-output - 'rpm-rpmlint nil t "-I" message-id))) - :modes (sh-mode rpm-spec-mode) - :predicate (lambda () (or (not (eq major-mode 'sh-mode)) - ;; In `sh-mode', we need the proper shell - (eq sh-shell 'rpm)))) - -(flycheck-def-config-file-var flycheck-markdown-markdownlint-cli-config - markdown-markdownlint-cli nil - :package-version '(flycheck . "32")) - -(flycheck-define-checker markdown-markdownlint-cli - "Markdown checker using markdownlint-cli. - -See URL `https://github.com/igorshubovych/markdownlint-cli'." - :command ("markdownlint" - (config-file "--config" flycheck-markdown-markdownlint-cli-config) - source) - :error-patterns - ((error line-start - (file-name) ":" line - (? ":" column) " " (id (one-or-more (not (any space)))) - " " (message) line-end)) - :error-filter - (lambda (errors) - (flycheck-sanitize-errors - (flycheck-remove-error-file-names "(string)" errors))) - :modes (markdown-mode gfm-mode)) - -(flycheck-def-option-var flycheck-markdown-mdl-rules nil markdown-mdl - "Rules to enable for mdl. - -The value of this variable is a list of strings each of which is -the name of a rule to enable. - -By default all rules are enabled. - -See URL `https://git.io/vhi2t'." - :type '(repeat :tag "Enabled rules" - (string :tag "rule name")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "27")) - -(flycheck-def-option-var flycheck-markdown-mdl-tags nil markdown-mdl - "Rule tags to enable for mdl. - -The value of this variable is a list of strings each of which is -the name of a rule tag. Only rules with these tags are enabled. - -By default all rules are enabled. - -See URL `https://git.io/vhi2t'." - :type '(repeat :tag "Enabled tags" - (string :tag "tag name")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "27")) - -(flycheck-def-config-file-var flycheck-markdown-mdl-style markdown-mdl nil - :package-version '(flycheck . "27")) - -(flycheck-define-checker markdown-mdl - "Markdown checker using mdl. - -See URL `https://github.com/markdownlint/markdownlint'." - :command ("mdl" - (config-file "--style" flycheck-markdown-mdl-style) - (option "--tags=" flycheck-markdown-mdl-rules concat - flycheck-option-comma-separated-list) - (option "--rules=" flycheck-markdown-mdl-rules concat - flycheck-option-comma-separated-list)) - :standard-input t - :error-patterns - ((error line-start - (file-name) ":" line ": " (id (one-or-more alnum)) " " (message) - line-end)) - :error-filter - (lambda (errors) - (flycheck-sanitize-errors - (flycheck-remove-error-file-names "(stdin)" errors))) - :modes (markdown-mode gfm-mode)) - -(flycheck-define-checker nix - "Nix checker using nix-instantiate. - -See URL `https://nixos.org/nix/manual/#sec-nix-instantiate'." - :command ("nix-instantiate" "--parse" "-") - :standard-input t - :error-patterns - ((error line-start - "at: (" line ":" column ") from stdin" - (one-or-more "\n" (zero-or-more space (one-or-more not-newline))) - (message) line-end) - (error line-start - "error: " (message) " at " (file-name) ":" line ":" column - line-end)) - :error-filter - (lambda (errors) - (flycheck-sanitize-errors - (flycheck-remove-error-file-names "(string)" errors))) - :next-checkers ((warning . nix-linter)) - :modes nix-mode) - -(defun flycheck-parse-nix-linter (output checker buffer) - "Parse nix-linter warnings from JSON OUTPUT. - -CHECKER and BUFFER denote the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `https://github.com/Synthetica9/nix-linter' for more -information about nix-linter." - (mapcar (lambda (err) - (let-alist err - (flycheck-error-new-at - .pos.spanBegin.sourceLine - .pos.spanBegin.sourceColumn - 'warning - .description - :id .offense - :checker checker - :buffer buffer - :filename (buffer-file-name buffer) - :end-line .pos.spanEnd.sourceLine - :end-column .pos.spanEnd.sourceColumn))) - (flycheck-parse-json output))) - -(flycheck-define-checker nix-linter - "Nix checker using nix-linter. - -See URL `https://github.com/Synthetica9/nix-linter'." - :command ("nix-linter" "--json-stream" "-") - :standard-input t - :error-parser flycheck-parse-nix-linter - :error-explainer - (lambda (error) - (-when-let (error-code (flycheck-error-id error)) - (flycheck-call-checker-process-for-output - 'nix-linter nil t "--help-for" error-code))) - :modes nix-mode) - -(defun flycheck-locate-sphinx-source-directory () - "Locate the Sphinx source directory for the current buffer. - -Return the source directory, or nil, if the current buffer is not -part of a Sphinx project." - (-when-let* ((filename (buffer-file-name)) - (dir (locate-dominating-file filename "conf.py"))) - (expand-file-name dir))) - -(flycheck-define-checker rst - "A ReStructuredText (RST) syntax checker using Docutils. - -See URL `http://docutils.sourceforge.net/'." - ;; include:: directives - :command ("rst2pseudoxml.py" "--report=2" "--halt=5" - ;; Read from standard input and throw output away - "-" null-device) - :standard-input t - :error-patterns - ((warning line-start ":" line ": (WARNING/2) " (message) line-end) - (error line-start ":" line - ": (" (or "ERROR/3" "SEVERE/4") ") " - (message) line-end)) - :modes rst-mode) - -(flycheck-def-option-var flycheck-sphinx-warn-on-missing-references t rst-sphinx - "Whether to warn about missing references in Sphinx. - -When non-nil (the default), warn about all missing references in -Sphinx via `-n'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.17")) - -(flycheck-define-checker rst-sphinx - "A ReStructuredText (RST) syntax checker using Sphinx. - -Requires Sphinx 1.2 or newer. See URL `http://sphinx-doc.org'." - :command ("sphinx-build" "-b" "pseudoxml" - "-q" "-N" ; Reduced output and no colors - (option-flag "-n" flycheck-sphinx-warn-on-missing-references) - (eval (flycheck-locate-sphinx-source-directory)) - temporary-directory ; Redirect the output to a temporary - ; directory - source-original) ; Sphinx needs the original document - :error-patterns - ((warning line-start (file-name) ":" line ": WARNING: " (message) line-end) - (error line-start - (file-name) ":" line - ": " (or "ERROR" "SEVERE") ": " - (message) line-end)) - :modes rst-mode - :predicate (lambda () (and (flycheck-buffer-saved-p) - (flycheck-locate-sphinx-source-directory)))) - -(defun flycheck-ruby--find-project-root (_checker) - "Compute an appropriate working-directory for flycheck-ruby. - -This is either a parent directory containing a Gemfile, or nil." - (and - buffer-file-name - (locate-dominating-file buffer-file-name "Gemfile"))) - -(flycheck-def-config-file-var flycheck-rubocoprc ruby-rubocop ".rubocop.yml") - -(flycheck-def-option-var flycheck-rubocop-lint-only nil - (ruby-rubocop ruby-standard) - "Whether to only report code issues in Rubocop and Standard. - -When non-nil, only report code issues, via `--lint'. Otherwise -report style issues as well." - :safe #'booleanp - :type 'boolean - :package-version '(flycheck . "0.16")) - -(defconst flycheck-ruby-rubocop-error-patterns - '((info line-start (file-name) ":" line ":" column ": C: " - (optional (id (one-or-more (not (any ":")))) ": ") (message) line-end) - (warning line-start (file-name) ":" line ":" column ": W: " - (optional (id (one-or-more (not (any ":")))) ": ") (message) - line-end) - (error line-start (file-name) ":" line ":" column ": " (or "E" "F") ": " - (optional (id (one-or-more (not (any ":")))) ": ") (message) - line-end))) - -(flycheck-def-executable-var ruby-rubocop "rubocop") -(flycheck-define-command-checker 'ruby-rubocop - "A Ruby syntax and style checker using the RuboCop tool. - -You need at least RuboCop 0.34 for this syntax checker. - -See URL `https://rubocop.org/'." - ;; ruby-standard is defined based on this checker - :command '("rubocop" - "--display-cop-names" - "--force-exclusion" - "--format" "emacs" - ;; Explicitly disable caching to prevent Rubocop 0.35.1 and earlier - ;; from caching standard input. Later versions of Rubocop - ;; automatically disable caching with --stdin, see - ;; https://github.com/flycheck/flycheck/issues/844 and - ;; https://github.com/bbatsov/rubocop/issues/2576 - "--cache" "false" - (config-file "--config" flycheck-rubocoprc) - (option-flag "--lint" flycheck-rubocop-lint-only) - ;; Rubocop takes the original file name as argument when reading - ;; from standard input - "--stdin" source-original) - :standard-input t - :working-directory #'flycheck-ruby--find-project-root - :error-patterns flycheck-ruby-rubocop-error-patterns - :modes '(enh-ruby-mode ruby-mode) - :next-checkers '((warning . ruby-reek) - (warning . ruby-rubylint))) - -(flycheck-def-config-file-var flycheck-ruby-standardrc ruby-standard - ".standard.yml") - -(flycheck-def-executable-var ruby-standard "standardrb") -(flycheck-define-command-checker 'ruby-standard - "A Ruby syntax and style checker using the StandardRB gem. - -See URL `https://github.com/testdouble/standard' for more information." - ;; This checker is derived from ruby-rubocop; see above - :command '("standardrb" - "--display-cop-names" - "--force-exclusion" - "--format" "emacs" - "--cache" "false" - (config-file "--config" flycheck-ruby-standardrc) - (option-flag "--lint" flycheck-rubocop-lint-only) - "--stdin" source-original) - :standard-input t - :working-directory #'flycheck-ruby--find-project-root - :error-patterns flycheck-ruby-rubocop-error-patterns - :modes '(enh-ruby-mode ruby-mode) - :next-checkers '((warning . ruby-reek) - (warning . ruby-rubylint))) - -(flycheck-def-config-file-var flycheck-reekrc ruby-reek ".reek.yml" - :safe #'string-or-null-p - :package-version '(flycheck . "30")) - -(flycheck-define-checker ruby-reek - "A Ruby smell checker using reek. - -See URL `https://github.com/troessner/reek'." - :command ("reek" "--format" "json" - (config-file "--config" flycheck-reekrc) - source) - :error-parser flycheck-parse-reek - :modes (enh-ruby-mode ruby-mode) - :next-checkers ((warning . ruby-rubylint))) - -;; Default to `nil' to let Rubylint find its configuration file by itself, and -;; to maintain backwards compatibility with older Rubylint and Flycheck releases -(flycheck-def-config-file-var flycheck-rubylintrc ruby-rubylint nil) - -(flycheck-define-checker ruby-rubylint - "A Ruby syntax and code analysis checker using ruby-lint. - -Requires ruby-lint 2.0.2 or newer. See URL -`https://github.com/YorickPeterse/ruby-lint'." - :command ("ruby-lint" "--presenter=syntastic" - (config-file "--config" flycheck-rubylintrc) - source) - ;; Ruby Lint can't read from standard input - :error-patterns - ((info line-start - (file-name) ":I:" line ":" column ": " (message) line-end) - (warning line-start - (file-name) ":W:" line ":" column ": " (message) line-end) - (error line-start - (file-name) ":E:" line ":" column ": " (message) line-end)) - :modes (enh-ruby-mode ruby-mode)) - -(flycheck-define-checker ruby - "A Ruby syntax checker using the standard Ruby interpreter. - -Please note that the output of different Ruby versions and -implementations varies wildly. This syntax checker supports -current versions of MRI and JRuby, but may break when used with -other implementations or future versions of these -implementations. - -Please consider using `ruby-rubocop' or `ruby-reek' instead. - -See URL `https://www.ruby-lang.org/'." - :command ("ruby" "-w" "-c") - :standard-input t - :error-patterns - ;; These patterns support output from JRuby, too, to deal with RVM or Rbenv - ((error line-start "SyntaxError in -:" line ": " (message) line-end) - (warning line-start "-:" line ":" (optional column ":") - " warning: " (message) line-end) - (error line-start "-:" line ": " (message) line-end)) - :modes (enh-ruby-mode ruby-mode) - :next-checkers ((warning . ruby-rubylint))) - -(flycheck-define-checker ruby-jruby - "A Ruby syntax checker using the JRuby interpreter. - -This syntax checker is very primitive, and may break on future -versions of JRuby. - -Please consider using `ruby-rubocop' or `ruby-rubylint' instead. - -See URL `http://jruby.org/'." - :command ("jruby" "-w" "-c") - :standard-input t - :error-patterns - ((error line-start "SyntaxError in -:" line ": " (message) line-end) - (warning line-start "-:" line ": warning: " (message) line-end) - (error line-start "-:" line ": " (message) line-end)) - :modes (enh-ruby-mode ruby-mode) - :next-checkers ((warning . ruby-rubylint))) - -(flycheck-def-args-var flycheck-cargo-check-args (rust-cargo) - :package-version '(flycheck . "32")) - -(flycheck-def-args-var flycheck-rust-args (rust) - :package-version '(flycheck . "0.24")) - -(flycheck-def-option-var flycheck-rust-check-tests t (rust-cargo rust) - "Whether to check test code in Rust. - -For the `rust' checker: When non-nil, `rustc' is passed the -`--test' flag, which will check any code marked with the -`#[cfg(test)]' attribute and any functions marked with -`#[test]'. Otherwise, `rustc' is not passed `--test' and test -code will not be checked. Skipping `--test' is necessary when -using `#![no_std]', because compiling the test runner requires -`std'. - -For the `rust-cargo' checker: When non-nil, calls `cargo test ---no-run' instead of `cargo check'." - :type 'boolean - :safe #'booleanp - :package-version '("flycheck" . "0.19")) - -(flycheck-def-option-var flycheck-rust-crate-root nil rust - "A path to the crate root for the current buffer. - -The value of this variable is either a string with the path to -the crate root for the current buffer, or nil if the current buffer -is a crate. A relative path is relative to the current buffer. - -If this variable is non nil the current buffer will only be checked -if it is not modified, i.e. after it has been saved." - :type '(choice (const :tag "Unspecified" nil) - (file :tag "Root")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "0.20")) -(make-variable-buffer-local 'flycheck-rust-crate-root) - -(flycheck-def-option-var flycheck-rust-crate-type "lib" (rust-cargo rust) - "The type of the Rust Crate to check. - -For `rust-cargo', the value should be a string denoting the -target type passed to Cargo. See -`flycheck-rust-valid-crate-type-p' for the list of allowed -values. - -For `rust', the value should be a string denoting the crate type -for the `--crate-type' flag of rustc." - :type '(choice (const :tag "nil (rust/rust-cargo)" nil) - (const :tag "lib (rust/rust-cargo)" "lib") - (const :tag "bin (rust/rust-cargo)" "bin") - (const :tag "example (rust-cargo)" "example") - (const :tag "test (rust-cargo)" "test") - (const :tag "bench (rust-cargo)" "bench") - (const :tag "rlib (rust)" "rlib") - (const :tag "dylib (rust)" "dylib") - (const :tag "cdylib (rust)" "cdylib") - (const :tag "staticlib (rust)" "staticlib") - (const :tag "metadata (rust)" "metadata")) - :safe #'stringp - :package-version '(flycheck . "0.20")) -(make-variable-buffer-local 'flycheck-rust-crate-type) - -(flycheck-def-option-var flycheck-rust-binary-name nil rust-cargo - "The name of the binary to pass to `cargo check --CRATE-TYPE'. - -The value of this variable is a string denoting the name of the -target to check: usually the name of the crate, or the name of -one of the files under `src/bin', `tests', `examples' or -`benches'. - -This always requires a non-nil value, unless -`flycheck-rust-crate-type' is `lib' or nil, in which case it is -ignored." - :type '(choice (const :tag "Unspecified" nil) - (string :tag "Binary name")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "28")) -(make-variable-buffer-local 'flycheck-rust-binary-name) - -(flycheck-def-option-var flycheck-rust-features nil rust-cargo - "List of features to activate during build or check. - -The value of this variable is a list of strings denoting features -that will be activated to build the target to check. Features will -be passed to `cargo check --features=FEATURES'." - :type '(repeat :tag "Features to activate" - (string :tag "Feature")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "32")) -(make-variable-buffer-local 'flycheck-rust-features) - -(flycheck-def-option-var flycheck-rust-library-path nil rust - "A list of library directories for Rust. - -The value of this variable is a list of strings, where each -string is a directory to add to the library path of Rust. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Library directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.18")) - -(defun flycheck--fontify-as-markdown () - "Place current buffer in `markdown-view-mode' and fontify it." - (when (fboundp 'markdown-view-mode) - (let ((markdown-fontify-code-block-default-mode 'rust-mode) - (markdown-fontify-code-blocks-natively t) - (markdown-hide-markup t)) - (markdown-view-mode) - (font-lock-flush) - (font-lock-ensure)))) - -(defun flycheck-rust-error-explainer (error) - "Return an explanation for the given `flycheck-error' ERROR." - (-when-let (error-code (flycheck-error-id error)) - (lambda () - (flycheck-call-checker-process - 'rust nil standard-output t "--explain" error-code) - (with-current-buffer standard-output - (flycheck--fontify-as-markdown))))) - -(defun flycheck-rust-error-filter (errors) - "Filter ERRORS from rustc output that have no explanatory value." - (seq-remove - (lambda (err) - (or - ;; Macro errors emit a diagnostic in a phony file, - ;; e.g. "". - (-when-let (filename (flycheck-error-filename err)) - (string-match-p (rx "macros>" line-end) filename)) - ;; Redundant message giving the number of failed errors - (-when-let (msg (flycheck-error-message err)) - (string-match-p - (rx - (or (: "aborting due to " (optional (one-or-more num) " ") - "previous error") - (: "For more information about this error, try `rustc --explain " - (one-or-more alnum) "`."))) - msg)))) - errors)) - -(defun flycheck-rust-manifest-directory () - "Return the nearest directory holding the Cargo manifest. - -Return the nearest directory containing the `Cargo.toml' manifest -file, starting from the current buffer and using -`locate-dominating-file'. Return nil if there is no such file, -or if the current buffer has no file name." - (and buffer-file-name - (locate-dominating-file buffer-file-name "Cargo.toml"))) - -(defun flycheck-rust-cargo-metadata () - "Run 'cargo metadata' and return the result as parsed JSON object." - (car (flycheck-parse-json - (flycheck-call-checker-process-for-output - 'rust-cargo nil t - "metadata" "--no-deps" "--format-version" "1")))) - -(defun flycheck-rust-cargo-workspace-root () - "Return the path to the workspace root of a Rust Cargo project. - -Return nil if the workspace root does not exist (for Rust -versions inferior to 1.25)." - (let-alist (flycheck-rust-cargo-metadata) - .workspace_root)) - -(defun flycheck-rust-cargo-has-command-p (command) - "Whether Cargo has COMMAND in its list of commands. - -Execute `cargo --list' to find out whether COMMAND is present." - (let ((cargo (funcall flycheck-executable-find "cargo"))) - (member command (mapcar #'string-trim-left - (ignore-errors (process-lines cargo "--list")))))) - -(defun flycheck-rust-valid-crate-type-p (crate-type) - "Whether CRATE-TYPE is a valid target type for Cargo. - -A valid Cargo target type is one of `lib', `bin', `example', -`test' or `bench'." - (member crate-type '(nil "lib" "bin" "example" "test" "bench"))) - -(flycheck-define-checker rust-cargo - "A Rust syntax checker using Cargo. - -This syntax checker requires Rust 1.17 or newer. See URL -`https://www.rust-lang.org'." - :command ("cargo" - (eval (if flycheck-rust-check-tests - "test" - "check")) - (eval (when flycheck-rust-check-tests - "--no-run")) - (eval (when flycheck-rust-crate-type - (concat "--" flycheck-rust-crate-type))) - ;; All crate targets except "lib" need a binary name - (eval (when (and flycheck-rust-crate-type - (not (string= flycheck-rust-crate-type "lib"))) - flycheck-rust-binary-name)) - (option "--features=" flycheck-rust-features concat - flycheck-option-comma-separated-list) - (eval flycheck-cargo-check-args) - "--message-format=json") - :error-parser flycheck-parse-cargo-rustc - :error-filter (lambda (errors) - ;; In Rust 1.25+, filenames are relative to the workspace - ;; root. - (let ((root (flycheck-rust-cargo-workspace-root))) - (seq-do (lambda (err) - ;; Some errors are crate level and do not have a - ;; filename - (when (flycheck-error-filename err) - (setf (flycheck-error-filename err) - (expand-file-name - (flycheck-error-filename err) root)))) - (flycheck-rust-error-filter errors)))) - :error-explainer flycheck-rust-error-explainer - :modes rust-mode - :predicate flycheck-buffer-saved-p - :enabled flycheck-rust-manifest-directory - :working-directory (lambda (_) (flycheck-rust-manifest-directory)) - :verify - (lambda (_) - (and buffer-file-name - (let* ((has-toml (flycheck-rust-manifest-directory)) - (valid-crate-type (flycheck-rust-valid-crate-type-p - flycheck-rust-crate-type)) - (need-binary-name - (and flycheck-rust-crate-type - (not (string= flycheck-rust-crate-type "lib"))))) - (list - (flycheck-verification-result-new - :label "Cargo.toml" - :message (if has-toml "Found" "Missing") - :face (if has-toml 'success '(bold warning))) - (flycheck-verification-result-new - :label "Crate type" - :message (if valid-crate-type - (format "%s" flycheck-rust-crate-type) - (format "%s (invalid, should be one of 'lib', 'bin', \ -'test', 'example' or 'bench')" - flycheck-rust-crate-type)) - :face (if valid-crate-type 'success '(bold error))) - (flycheck-verification-result-new - :label "Binary name" - :message (cond - ((not need-binary-name) "Not required") - ((not flycheck-rust-binary-name) "Required") - (t (format "%s" flycheck-rust-binary-name))) - :face (cond - ((not need-binary-name) 'success) - ((not flycheck-rust-binary-name) '(bold error)) - (t 'success)))))))) - -(flycheck-define-checker rust - "A Rust syntax checker using Rust compiler. - -This syntax checker needs Rust 1.18 or newer. See URL -`https://www.rust-lang.org'." - :command ("rustc" - (option "--crate-type" flycheck-rust-crate-type) - "--emit=mir" "-o" "/dev/null" ; avoid creating binaries - "--error-format=json" - (option-flag "--test" flycheck-rust-check-tests) - (option-list "-L" flycheck-rust-library-path concat) - (eval flycheck-rust-args) - (eval (or flycheck-rust-crate-root - (flycheck-substitute-argument 'source-original 'rust)))) - :error-parser flycheck-parse-rustc - :error-filter flycheck-rust-error-filter - :error-explainer flycheck-rust-error-explainer - :modes rust-mode - :predicate flycheck-buffer-saved-p) - -(flycheck-define-checker rust-clippy - "A Rust syntax checker using clippy. - -See URL `https://github.com/rust-lang-nursery/rust-clippy'." - :command ("cargo" "clippy" "--message-format=json") - :error-parser flycheck-parse-cargo-rustc - :error-filter flycheck-rust-error-filter - :error-explainer flycheck-rust-error-explainer - :modes rust-mode - :predicate flycheck-buffer-saved-p - :enabled (lambda () - (and (flycheck-rust-cargo-has-command-p "clippy") - (flycheck-rust-manifest-directory))) - :working-directory (lambda (_) (flycheck-rust-manifest-directory)) - :verify - (lambda (_) - (and buffer-file-name - (let ((has-toml (flycheck-rust-manifest-directory)) - (has-clippy (flycheck-rust-cargo-has-command-p "clippy"))) - (list - (flycheck-verification-result-new - :label "Clippy" - :message (if has-clippy "Found" - "Cannot find the `cargo clippy' command") - :face (if has-clippy 'success '(bold warning))) - (flycheck-verification-result-new - :label "Cargo.toml" - :message (if has-toml "Found" "Missing") - :face (if has-toml 'success '(bold warning)))))))) - -(defvar flycheck-sass-scss-cache-directory nil - "The cache directory for `sass' and `scss'.") - -(defun flycheck-sass-scss-cache-location () - "Get the cache location for `sass' and `scss'. - -If no cache directory exists yet, create one and return it. -Otherwise return the previously used cache directory." - (setq flycheck-sass-scss-cache-directory - (or flycheck-sass-scss-cache-directory - (make-temp-file "flycheck-sass-scss-cache" 'directory)))) - -(flycheck-def-option-var flycheck-sass-compass nil sass - "Whether to enable the Compass CSS framework. - -When non-nil, enable the Compass CSS framework, via `--compass'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.16")) - -(flycheck-define-checker sass - "A Sass syntax checker using the Sass compiler. - -See URL `http://sass-lang.com'." - :command ("sass" - "--cache-location" (eval (flycheck-sass-scss-cache-location)) - (option-flag "--compass" flycheck-sass-compass) - "--check" "--stdin") - :standard-input t - :error-patterns - ((error line-start - (or "Syntax error: " "Error: ") - (message (one-or-more not-newline) - (zero-or-more "\n" - (one-or-more " ") - (one-or-more not-newline))) - (optional "\r") "\n" (one-or-more " ") "on line " line - " of standard input" - line-end) - (warning line-start - "WARNING: " - (message (one-or-more not-newline) - (zero-or-more "\n" - (one-or-more " ") - (one-or-more not-newline))) - (optional "\r") "\n" (one-or-more " ") "on line " line - " of " (one-or-more not-newline) - line-end)) - :modes sass-mode) - -(flycheck-def-config-file-var flycheck-sass-lintrc sass/scss-sass-lint - ".sass-lint.yml" - :package-version '(flycheck . "30")) - -(flycheck-define-checker sass/scss-sass-lint - "A SASS/SCSS syntax checker using sass-Lint. - -See URL `https://github.com/sasstools/sass-lint'." - :command ("sass-lint" - "--verbose" - "--no-exit" - "--format" "Checkstyle" - (config-file "--config" flycheck-sass-lintrc) - source) - :error-parser flycheck-parse-checkstyle - :modes (sass-mode scss-mode)) - -(flycheck-define-checker scala - "A Scala syntax checker using the Scala compiler. - -See URL `https://www.scala-lang.org/'." - :command ("scalac" "-Ystop-after:parser" source) - :error-patterns - ((error line-start (file-name) ":" line ": error: " (message) line-end)) - :modes scala-mode - :next-checkers ((warning . scala-scalastyle))) - -(flycheck-def-config-file-var flycheck-scalastylerc scala-scalastyle nil - :package-version '(flycheck . "0.20")) - -(flycheck-define-checker scala-scalastyle - "A Scala style checker using scalastyle. - -Note that this syntax checker is not used if -`flycheck-scalastylerc' is nil or refers to a non-existing file. - -See URL `http://www.scalastyle.org'." - :command ("scalastyle" - (config-file "-c" flycheck-scalastylerc) - source) - :error-patterns - ((error line-start "error file=" (file-name) " message=" - (message) " line=" line (optional " column=" column) line-end) - (warning line-start "warning file=" (file-name) " message=" - (message) " line=" line (optional " column=" column) line-end)) - :error-filter (lambda (errors) - (flycheck-sanitize-errors - (flycheck-increment-error-columns errors))) - :modes scala-mode - :predicate - ;; Inhibit this syntax checker if the JAR or the configuration are unset or - ;; missing - (lambda () (and flycheck-scalastylerc - (flycheck-locate-config-file flycheck-scalastylerc - 'scala-scalastyle))) - :verify (lambda (checker) - (let ((config-file (and flycheck-scalastylerc - (flycheck-locate-config-file - flycheck-scalastylerc checker)))) - (list - (flycheck-verification-result-new - :label "Configuration file" - :message (cond - ((not flycheck-scalastylerc) - "`flycheck-scalastyletrc' not set") - ((not config-file) - (format "file %s not found" flycheck-scalastylerc)) - (t (format "found at %s" config-file))) - :face (cond - ((not flycheck-scalastylerc) '(bold warning)) - ((not config-file) '(bold error)) - (t 'success))))))) - -(flycheck-def-args-var flycheck-scheme-chicken-args scheme-chicken - :package-version '(flycheck . "32")) - -(flycheck-define-checker scheme-chicken - "A CHICKEN Scheme syntax checker using the CHICKEN compiler `csc'. - -See URL `http://call-cc.org/'." - :command ("csc" "-analyze-only" "-local" - (eval flycheck-scheme-chicken-args) - source) - :error-patterns - ((info line-start - "Note: " (zero-or-more not-newline) ":\n" - (one-or-more (any space)) "(" (file-name) ":" line ") " (message) - line-end) - (warning line-start - "Warning: " (zero-or-more not-newline) ",\n" - (one-or-more (any space)) (zero-or-more not-newline) ":\n" - (one-or-more (any space)) "(" (file-name) ":" line ") " (message) - line-end) - (warning line-start - "Warning: " (zero-or-more not-newline) ":\n" - (one-or-more (any space)) "(" (file-name) ":" line ") " (message) - line-end) - (error line-start "Error: (line " line ") " (message) line-end) - (error line-start "Syntax error: (" (file-name) ":" line ")" - (zero-or-more not-newline) " - " - (message (one-or-more not-newline) - (zero-or-more "\n" - (zero-or-more space) - (zero-or-more not-newline)) - (one-or-more space) "<--") - line-end) - ;; A of version 4.12.0, the chicken compiler doesn't provide a - ;; line number for this error. - (error line-start "Syntax error: " - (message (one-or-more not-newline) - (zero-or-more "\n" - (zero-or-more space) - (zero-or-more not-newline)) - (one-or-more space) "<--") - line-end) - (error line-start - "Error: " (zero-or-more not-newline) ":\n" - (one-or-more (any space)) "(" (file-name) ":" line ") " (message) - line-end) - ;; A of version 4.12.0, the chicken compiler doesn't provide a - ;; line number for this error. - (error line-start "Error: " - (message (one-or-more not-newline) - (zero-or-more "\n" - (zero-or-more space) - (zero-or-more not-newline)) - (one-or-more space) "<--"))) - :error-filter flycheck-fill-empty-line-numbers - :predicate - (lambda () - ;; In `scheme-mode' we must check the current Scheme implementation - ;; being used - (and (boundp 'geiser-impl--implementation) - (eq geiser-impl--implementation 'chicken))) - :verify - (lambda (_checker) - (let ((geiser-impl (bound-and-true-p geiser-impl--implementation))) - (list - (flycheck-verification-result-new - :label "Geiser Implementation" - :message (cond - ((eq geiser-impl 'chicken) "Chicken Scheme") - (geiser-impl (format "Other: %s" geiser-impl)) - (t "Geiser not active")) - :face (cond - ((eq geiser-impl 'chicken) 'success) - (t '(bold error))))))) - :modes scheme-mode) - -(defconst flycheck-scss-lint-checkstyle-re - (rx "cannot load such file" (1+ not-newline) "scss_lint_reporter_checkstyle") - "Regular expression to parse missing checkstyle error.") - -(defun flycheck-parse-scss-lint (output checker buffer) - "Parse SCSS-Lint OUTPUT from CHECKER and BUFFER. - -Like `flycheck-parse-checkstyle', but catches errors about -missing checkstyle reporter from SCSS-Lint." - (if (string-match-p flycheck-scss-lint-checkstyle-re output) - (list (flycheck-error-new-at - 1 nil 'error "Checkstyle reporter for SCSS-Lint missing. -Please run gem install scss_lint_reporter_checkstyle" - :checker checker - :buffer buffer - :filename (buffer-file-name buffer))) - (flycheck-parse-checkstyle output checker buffer))) - -(flycheck-def-config-file-var flycheck-scss-lintrc scss-lint ".scss-lint.yml" - :package-version '(flycheck . "0.23")) - -(flycheck-define-checker scss-lint - "A SCSS syntax checker using SCSS-Lint. - -Needs SCSS-Lint 0.43.2 or newer. - -See URL `https://github.com/brigade/scss-lint'." - :command ("scss-lint" - "--require=scss_lint_reporter_checkstyle" - "--format=Checkstyle" - (config-file "--config" flycheck-scss-lintrc) - "--stdin-file-path" source-original "-") - :standard-input t - ;; We cannot directly parse Checkstyle XML, since for some mysterious reason - ;; SCSS-Lint doesn't have a built-in Checkstyle reporter, and instead ships it - ;; as an addon which might not be installed. We use a custom error parser to - ;; check whether the addon is missing and turn that into a special kind of - ;; Flycheck error. - :error-parser flycheck-parse-scss-lint - :modes scss-mode - :verify - (lambda (checker) - (-when-let - (output (flycheck-call-checker-process-for-output - checker nil nil "--require=scss_lint_reporter_checkstyle")) - (let ((reporter-missing - (string-match-p flycheck-scss-lint-checkstyle-re output))) - (list - (flycheck-verification-result-new - :label "checkstyle reporter" - :message (if reporter-missing - "scss_lint_reporter_checkstyle plugin missing" - "present") - :face (if reporter-missing - '(bold error) - 'success))))))) - -(flycheck-define-checker scss-stylelint - "A SCSS syntax and style checker using stylelint. - -See URL `http://stylelint.io/'." - :command ("stylelint" - (eval flycheck-stylelint-args) - "--syntax" "scss" - (option-flag "--quiet" flycheck-stylelint-quiet) - (config-file "--config" flycheck-stylelintrc)) - :standard-input t - :error-parser flycheck-parse-stylelint - :predicate flycheck-buffer-nonempty-p - :modes (scss-mode)) - -(flycheck-def-option-var flycheck-scss-compass nil scss - "Whether to enable the Compass CSS framework. - -When non-nil, enable the Compass CSS framework, via `--compass'." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "0.16")) - -(flycheck-define-checker scss - "A SCSS syntax checker using the SCSS compiler. - -See URL `http://sass-lang.com'." - :command ("scss" - "--cache-location" (eval (flycheck-sass-scss-cache-location)) - (option-flag "--compass" flycheck-scss-compass) - "--check" "--stdin") - :standard-input t - :error-patterns - ((error line-start - (or "Syntax error: " "Error: ") - (message (one-or-more not-newline) - (zero-or-more "\n" - (one-or-more " ") - (one-or-more not-newline))) - (optional "\r") "\n" (one-or-more " ") "on line " line - " of standard input" - line-end) - (warning line-start - "WARNING: " - (message (one-or-more not-newline) - (zero-or-more "\n" - (one-or-more " ") - (one-or-more not-newline))) - (optional "\r") "\n" (one-or-more " ") "on line " line - " of an unknown file" - line-end)) - :modes scss-mode) - -(flycheck-def-args-var flycheck-sh-bash-args (sh-bash) - :package-version '(flycheck . "32")) - -(flycheck-define-checker sh-bash - "A Bash syntax checker using the Bash shell. - -See URL `http://www.gnu.org/software/bash/'." - :command ("bash" "--norc" "-n" - (eval flycheck-sh-bash-args) - "--") - :standard-input t - :error-patterns - ((error line-start - ;; The name/path of the bash executable - (one-or-more (not (any ":"))) ":" - ;; A label "line", possibly localized - (one-or-more (not (any digit))) - line (zero-or-more " ") ":" (zero-or-more " ") - (message) line-end)) - :modes sh-mode - :predicate (lambda () (eq sh-shell 'bash)) - :next-checkers ((warning . sh-shellcheck))) - -(flycheck-define-checker sh-posix-dash - "A POSIX Shell syntax checker using the Dash shell. - -See URL `http://gondor.apana.org.au/~herbert/dash/'." - :command ("dash" "-n") - :standard-input t - :error-patterns - ((error line-start (one-or-more (not (any ":"))) ": " line ": " (message))) - :modes sh-mode - :predicate (lambda () (eq sh-shell 'sh)) - :next-checkers ((warning . sh-shellcheck))) - -(flycheck-define-checker sh-posix-bash - "A POSIX Shell syntax checker using the Bash shell. - -See URL `http://www.gnu.org/software/bash/'." - :command ("bash" "--posix" "--norc" "-n" "--") - :standard-input t - :error-patterns - ((error line-start - ;; The name/path of the bash executable - (one-or-more (not (any ":"))) ":" - ;; A label "line", possibly localized - (one-or-more (not (any digit))) - line (zero-or-more " ") ":" (zero-or-more " ") - (message) line-end)) - :modes sh-mode - :predicate (lambda () (eq sh-shell 'sh)) - :next-checkers ((warning . sh-shellcheck))) - -(flycheck-define-checker sh-zsh - "A Zsh syntax checker using the Zsh shell. - -See URL `http://www.zsh.org/'." - :command ("zsh" "--no-exec" "--no-globalrcs" "--no-rcs" source) - :error-patterns - ((error line-start (file-name) ":" line ": " (message) line-end)) - :modes sh-mode - :predicate (lambda () (eq sh-shell 'zsh)) - :next-checkers ((warning . sh-shellcheck))) - -(defconst flycheck-shellcheck-supported-shells '(bash ksh88 sh) - "Shells supported by ShellCheck.") - -(flycheck-def-option-var flycheck-shellcheck-excluded-warnings nil sh-shellcheck - "A list of excluded warnings for ShellCheck. - -The value of this variable is a list of strings, where each -string is a warning code to be excluded from ShellCheck reports. -By default, no warnings are excluded." - :type '(repeat :tag "Excluded warnings" - (string :tag "Warning code")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.21")) - -(flycheck-def-option-var flycheck-shellcheck-follow-sources t sh-shellcheck - "Whether to follow external sourced files in scripts. - -Shellcheck will follow and parse sourced files so long as a -pre-runtime resolvable path to the file is present. This can -either be part of the source command itself: - source /full/path/to/file.txt -or added as a shellcheck directive before the source command: - # shellcheck source=/full/path/to/file.txt." - :type 'boolean - :safe #'booleanp - :package-version '(flycheck . "31")) - -(flycheck-define-checker sh-shellcheck - "A shell script syntax and style checker using Shellcheck. - -See URL `https://github.com/koalaman/shellcheck/'." - :command ("shellcheck" - "--format" "checkstyle" - "--shell" (eval (symbol-name sh-shell)) - (option-flag "--external-sources" - flycheck-shellcheck-follow-sources) - (option "--exclude" flycheck-shellcheck-excluded-warnings list - flycheck-option-comma-separated-list) - "-") - :standard-input t - :error-parser flycheck-parse-checkstyle - :error-filter - (lambda (errors) - (flycheck-remove-error-file-names - "-" (flycheck-dequalify-error-ids errors))) - :modes sh-mode - :predicate (lambda () (memq sh-shell flycheck-shellcheck-supported-shells)) - :verify (lambda (_) - (let ((supports-shell (memq sh-shell - flycheck-shellcheck-supported-shells))) - (list - (flycheck-verification-result-new - :label (format "Shell %s supported" sh-shell) - :message (if supports-shell "yes" "no") - :face (if supports-shell 'success '(bold warning)))))) - :error-explainer - (lambda (err) - (let ((error-code (flycheck-error-id err)) - (url "https://github.com/koalaman/shellcheck/wiki/%s")) - (and error-code `(url . ,(format url error-code)))))) - -(flycheck-define-checker slim - "A Slim syntax checker using the Slim compiler. - -See URL `http://slim-lang.com'." - :command ("slimrb" "--compile") - :standard-input t - :error-patterns - ((error line-start - "Slim::Parser::SyntaxError:" (message) (optional "\r") "\n " - "STDIN, Line " line (optional ", Column " column) - line-end)) - :modes slim-mode - :next-checkers ((warning . slim-lint))) - -(flycheck-define-checker slim-lint - "A Slim linter. - -See URL `https://github.com/sds/slim-lint'." - :command ("slim-lint" "--reporter=checkstyle" source) - :error-parser flycheck-parse-checkstyle - :modes slim-mode) - -(flycheck-define-checker sql-sqlint - "A SQL syntax checker using the sqlint tool. - -See URL `https://github.com/purcell/sqlint'." - :command ("sqlint") - :standard-input t - :error-patterns - ((warning line-start "stdin:" line ":" column ":WARNING " - (message (one-or-more not-newline) - (zero-or-more "\n" - (one-or-more " ") - (one-or-more not-newline))) - line-end) - (error line-start "stdin:" line ":" column ":ERROR " - (message (one-or-more not-newline) - (zero-or-more "\n" - (one-or-more " ") - (one-or-more not-newline))) - line-end)) - :modes (sql-mode)) - -(flycheck-define-checker systemd-analyze - "A systemd unit checker using systemd-analyze(1). - -See URL -`https://www.freedesktop.org/software/systemd/man/systemd-analyze.html'." - :command ("systemd-analyze" "verify" source) - :error-parser flycheck-parse-with-patterns-without-color - :error-patterns - ((error line-start (file-name) ":" (optional line ":") (message) line-end) - (error line-start "[" (file-name) ":" line "]" (message) line-end)) - :error-filter (lambda (errors) - (flycheck-sanitize-errors - (flycheck-fill-empty-line-numbers errors))) - :modes (systemd-mode)) - -(flycheck-def-config-file-var flycheck-chktexrc tex-chktex ".chktexrc") - -(flycheck-define-checker tcl-nagelfar - "An extensible tcl syntax checker - -See URL `http://nagelfar.sourceforge.net/'." - :command ("nagelfar" "-H" source) - :error-patterns - ;; foo.tcl: 29: E Wrong number of arguments (4) to "set" - ;; foo.tcl: 29: W Expr without braces - ((info line-start (file-name) ": " line ": N " (message) line-end) - (warning line-start (file-name) ": " line ": W " (message) line-end) - (error line-start (file-name) ": " line ": E " (message) line-end)) - :modes tcl-mode) - -(flycheck-define-checker terraform - "A Terraform syntax checker with `terraform fmt'. - -See URL `https://www.terraform.io/docs/commands/fmt.html'." - :command ("terraform" "fmt" "-no-color" "-") - :standard-input t - :error-patterns - ((error line-start "Error: " (one-or-more not-newline) - "\n\n on line " line ", in " (one-or-more not-newline) ":" - (one-or-more "\n" (zero-or-more space (one-or-more not-newline))) - (message (one-or-more (and (one-or-more (not (any ?\n))) ?\n))) - line-end) - (error line-start "Error: " (one-or-more not-newline) - "\n\n on line " line ":\n (source code not available)\n\n" - (message (one-or-more (and (one-or-more (not (any ?\n))) ?\n))) - line-end)) - :next-checkers ((warning . terraform-tflint)) - :modes terraform-mode) - -(flycheck-def-option-var flycheck-tflint-variable-files nil terraform-tflint - "A list of files to resolve terraform variables. - -The value of this variable is a list of strings, where each -string is a file to add to the terraform variables files. -Relative files are relative to the file being checked." - :type '(repeat (directory :tag "Variable file")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "32")) - -(defun flycheck-parse-tflint-linter (output checker buffer) - "Parse tflint warnings from JSON OUTPUT. - -CHECKER and BUFFER denote the CHECKER that returned OUTPUT and -the BUFFER that was checked respectively. - -See URL `https://github.com/wata727/tflint' for more -information about tflint." - (mapcar (lambda (err) - (let-alist err - (flycheck-error-new-at - .range.start.line - .range.start.column - (pcase .rule.severity - ("error" 'error) - ("warning" 'warning) - (_ 'error)) - .message - :end-line .range.end.line - :end-column .range.end.column - :id .rule.name - :checker checker - :buffer buffer - :filename (buffer-file-name buffer)))) - (cdr (assq 'issues (car (flycheck-parse-json output)))))) - -(flycheck-define-checker terraform-tflint - "A Terraform checker using tflint. - -See URL `https://github.com/wata727/tflint'." - :command ("tflint" "--format=json" - (option-list "--var-file=" flycheck-tflint-variable-files concat) - source-original) - :error-parser flycheck-parse-tflint-linter - :predicate flycheck-buffer-saved-p - :modes terraform-mode) - -(flycheck-define-checker tex-chktex - "A TeX and LaTeX syntax and style checker using chktex. - -See URL `http://www.nongnu.org/chktex/'." - :command ("chktex" - (config-file "--localrc" flycheck-chktexrc) - ;; Compact error messages, and no version information, and execute - ;; \input statements - "--verbosity=0" "--quiet" "--inputfiles") - :standard-input t - :error-patterns - ((warning line-start "stdin:" line ":" column ":" - (id (one-or-more digit)) ":" (message) line-end)) - :error-filter - (lambda (errors) - (flycheck-sanitize-errors (flycheck-increment-error-columns errors))) - :modes (latex-mode plain-tex-mode)) - -(flycheck-define-checker tex-lacheck - "A LaTeX syntax and style checker using lacheck. - -See URL `http://www.ctan.org/pkg/lacheck'." - :command ("lacheck" source-inplace) - :error-patterns - ((warning line-start - "\"" (file-name) "\", line " line ": " (message) - line-end)) - :modes latex-mode) - -(flycheck-define-checker texinfo - "A Texinfo syntax checker using makeinfo. - -See URL `http://www.gnu.org/software/texinfo/'." - :command ("makeinfo" "-o" null-device "-") - :standard-input t - :error-patterns - ((warning line-start - "-:" line (optional ":" column) ": " "warning: " (message) - line-end) - (error line-start - "-:" line (optional ":" column) ": " (message) - line-end)) - :modes texinfo-mode) - -(flycheck-def-config-file-var flycheck-textlint-config - textlint "textlintrc.json") - -;; This needs to be set because textlint plugins are installed separately, -;; and there is no way to check their installation status -- textlint simply -;; prints a backtrace. -(flycheck-def-option-var flycheck-textlint-plugin-alist - '((markdown-mode . "@textlint/markdown") - (gfm-mode . "@textlint/markdown") - (t . "@textlint/text")) - textlint - "An alist mapping major modes to textlint plugins. - -Each item is a cons cell `(MAJOR-MODE . PLUGIN)', where MAJOR-MODE is a mode -`flycheck-textlint' supports and PLUGIN is a textlint plugin. As a catch-all, -when MAJOR-MODE is t, that PLUGIN will be used for any supported mode that -isn't specified. - -See URL `https://npms.io/search?q=textlint-plugin' for all textlint plugins -published on NPM." - :type '(repeat (choice (cons symbol string) - (cons (const t) string)))) - -(defun flycheck--textlint-get-plugin () - "Return the textlint plugin for the current mode." - (cdr (-first - (lambda (arg) - (pcase-let ((`(,mode . _) arg)) - (or (and (booleanp mode) mode) ; mode is t - (derived-mode-p mode)))) - flycheck-textlint-plugin-alist))) - -(flycheck-define-checker textlint - "A text prose linter using textlint. - -See URL `https://textlint.github.io/'." - :command ("textlint" - (config-file "--config" flycheck-textlint-config) - "--format" "json" - ;; get the first matching plugin from plugin-alist - "--plugin" - (eval (flycheck--textlint-get-plugin)) - source) - ;; textlint seems to say that its json output is compatible with ESLint. - ;; https://textlint.github.io/docs/formatter.html - :error-parser flycheck-parse-eslint - ;; textlint can support different formats with textlint plugins, but - ;; only text and markdown formats are installed by default. Ask the - ;; user to add mode->plugin mappings manually in - ;; `flycheck-textlint-plugin-alist'. - :modes - (text-mode markdown-mode gfm-mode message-mode adoc-mode - mhtml-mode latex-mode org-mode rst-mode) - :enabled - (lambda () (flycheck--textlint-get-plugin)) - :verify - (lambda (_) - (let ((plugin (flycheck--textlint-get-plugin))) - (list - (flycheck-verification-result-new - :label "textlint plugin" - :message plugin - :face 'success))))) - -(flycheck-def-config-file-var flycheck-typescript-tslint-config - typescript-tslint "tslint.json" - :package-version '(flycheck . "27")) - -(flycheck-def-option-var flycheck-typescript-tslint-rulesdir - nil typescript-tslint - "The directory of custom rules for TSLint. - -The value of this variable is either a string containing the path -to a directory with custom rules, or nil, to not give any custom -rules to TSLint. - -Refer to the TSLint manual at URL -`http://palantir.github.io/tslint/usage/cli/' -for more information about the custom directory." - :type '(choice (const :tag "No custom rules directory" nil) - (directory :tag "Custom rules directory")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "27")) - -(flycheck-def-args-var flycheck-tslint-args (typescript-tslint) - :package-version '(flycheck . "31")) - -(flycheck-define-checker typescript-tslint - "TypeScript style checker using TSLint. - -Note that this syntax checker is not used if -`flycheck-typescript-tslint-config' is nil or refers to a -non-existing file. - -See URL `https://github.com/palantir/tslint'." - :command ("tslint" "--format" "json" - (config-file "--config" flycheck-typescript-tslint-config) - (option "--rules-dir" flycheck-typescript-tslint-rulesdir) - (eval flycheck-tslint-args) - source-inplace) - :error-parser flycheck-parse-tslint - :modes (typescript-mode)) - -(flycheck-def-option-var flycheck-verilator-include-path nil verilog-verilator - "A list of include directories for Verilator. - -The value of this variable is a list of strings, where each -string is a directory to add to the include path of Verilator. -Relative paths are relative to the file being checked." - :type '(repeat (directory :tag "Include directory")) - :safe #'flycheck-string-list-p - :package-version '(flycheck . "0.24")) - -(flycheck-define-checker verilog-verilator - "A Verilog syntax checker using the Verilator Verilog HDL simulator. - -See URL `https://www.veripool.org/wiki/verilator'." - :command ("verilator" "--lint-only" "-Wall" - (option-list "-I" flycheck-verilator-include-path concat) - source) - :error-patterns - ((warning line-start "%Warning-" (zero-or-more not-newline) ": " - (file-name) ":" line ": " (message) line-end) - (error line-start "%Error: " (file-name) ":" - line ": " (message) line-end)) - :modes verilog-mode) - -(flycheck-def-option-var flycheck-ghdl-language-standard nil vhdl-ghdl - "The language standard to use in GHDL. - -The value of this variable is either a string denoting a language -standard, or nil, to use the default standard. When non-nil, -pass the language standard via the `--std' option." - :type '(choice (const :tag "Default standard" nil) - (string :tag "Language standard")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "32")) -(make-variable-buffer-local 'flycheck-ghdl-language-standard) - -(flycheck-def-option-var flycheck-ghdl-workdir nil vhdl-ghdl - "The directory to use for the file library. - -The value of this variable is either a string with the directory -to use for the file library, or nil, to use the default value. -When non-nil, pass the directory via the `--workdir' option." - :type '(choice (const :tag "Default directory" nil) - (string :tag "Directory for the file library")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "32")) -(make-variable-buffer-local 'flycheck-ghdl-workdir) - -(flycheck-def-option-var flycheck-ghdl-ieee-library nil vhdl-ghdl - "The standard to use for the IEEE library. - -The value of this variable is either a string denoting an ieee library -standard, or nil, to use the default standard. When non-nil, -pass the ieee library standard via the `--ieee' option." - :type '(choice (const :tag "Default standard" nil) - (const :tag "No IEEE Library" "none") - (const :tag "IEEE standard" "standard") - (const :tag "Synopsys standard" "synopsys") - (const :tag "Mentor standard" "mentor")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "32")) -(make-variable-buffer-local 'flycheck-ghdl-ieee-library) - -(flycheck-define-checker vhdl-ghdl - "A VHDL syntax checker using GHDL. - -See URL `https://github.com/ghdl/ghdl'." - :command ("ghdl" - "-s" ; only do the syntax checking - (option "--std=" flycheck-ghdl-language-standard concat) - (option "--workdir=" flycheck-ghdl-workdir concat) - (option "--ieee=" flycheck-ghdl-ieee-library concat) - source) - :error-patterns - ((error line-start (file-name) ":" line ":" column ": " (message) line-end)) - :modes vhdl-mode) - -(flycheck-def-option-var flycheck-xml-xmlstarlet-xsd-path nil xml-xmlstarlet - "An XSD schema to validate against." - :type '(choice (const :tag "None" nil) - (file :tag "XSD schema")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "31")) - -(flycheck-define-checker xml-xmlstarlet - "A XML syntax checker and validator using the xmlstarlet utility. - -See URL `http://xmlstar.sourceforge.net/'." - ;; Validate standard input with verbose error messages, and do not dump - ;; contents to standard output - :command ("xmlstarlet" "val" "--err" "--quiet" - (option "--xsd" flycheck-xml-xmlstarlet-xsd-path) - "-") - :standard-input t - :error-patterns - ((error line-start "-:" line "." column ": " (message) line-end)) - :modes (xml-mode nxml-mode)) - -(flycheck-def-option-var flycheck-xml-xmllint-xsd-path nil xml-xmllint - "An XSD schema to validate against." - :type '(choice (const :tag "None" nil) - (file :tag "XSD schema")) - :safe #'flycheck-string-or-nil-p - :package-version '(flycheck . "31")) - -(flycheck-define-checker xml-xmllint - "A XML syntax checker and validator using the xmllint utility. - -The xmllint is part of libxml2, see URL -`http://www.xmlsoft.org/'." - :command ("xmllint" "--noout" - (option "--schema" flycheck-xml-xmllint-xsd-path) - "-") - :standard-input t - :error-patterns - ((error line-start "-:" line ": " (message) line-end)) - :modes (xml-mode nxml-mode)) - -(flycheck-define-checker yaml-jsyaml - "A YAML syntax checker using JS-YAML. - -See URL `https://github.com/nodeca/js-yaml'." - :command ("js-yaml") - :standard-input t - :error-patterns - ((error line-start - (or "JS-YAML" "YAMLException") ": " - (message) " at line " line ", column " column ":" - line-end)) - :modes yaml-mode - :next-checkers ((warning . cwl))) - -(flycheck-define-checker yaml-ruby - "A YAML syntax checker using Ruby's YAML parser. - -This syntax checker uses the YAML parser from Ruby's standard -library. - -See URL `http://www.ruby-doc.org/stdlib-2.0.0/libdoc/yaml/rdoc/YAML.html'." - :command ("ruby" "-ryaml" "-e" "begin; - YAML.load(STDIN); \ - rescue Exception => e; \ - STDERR.puts \"stdin:#{e}\"; \ - end") - :standard-input t - :error-patterns - ((error line-start "stdin:" (zero-or-more not-newline) ":" (message) - "at line " line " column " column line-end)) - :modes yaml-mode - :next-checkers ((warning . cwl))) - -(flycheck-def-config-file-var flycheck-yamllintrc yaml-yamllint ".yamllint") - -(flycheck-define-checker yaml-yamllint - "A YAML syntax checker using YAMLLint. -See URL `https://github.com/adrienverge/yamllint'." - :standard-input t - :command ("yamllint" "-f" "parsable" "-" - (config-file "-c" flycheck-yamllintrc)) - :error-patterns - ((error line-start - "stdin:" line ":" column ": [error] " (message) line-end) - (warning line-start - "stdin:" line ":" column ": [warning] " (message) line-end)) - :modes yaml-mode) - -(provide 'flycheck) - -;; Local Variables: -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; flycheck.el ends here diff --git a/emacs.d/vendor/flycheck/flycheck.svg b/emacs.d/vendor/flycheck/flycheck.svg deleted file mode 100644 index 6c7886a..0000000 --- a/emacs.d/vendor/flycheck/flycheck.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - Flycheck Logo - - - - - image/svg+xml - - Flycheck Logo - - - Sebastian Wiesner - - - - - Copyright (C) 2014 Sebastian Wiesner - - - - - - - - - - - - - - - - - !Flyc - - diff --git a/emacs.d/vendor/flycheck/maint/Makefile b/emacs.d/vendor/flycheck/maint/Makefile deleted file mode 100644 index ba06e5d..0000000 --- a/emacs.d/vendor/flycheck/maint/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (c) 2012-2016 Sebastian Wiesner and Flycheck contributors - -# 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 3 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 . - -PYTHON = python3 -FLAKE8 = flake8 -PIP = pip3 -HAVE_PIP := $(shell sh -c "command -v $(PIP)") - -.DEFAULT_GOAL := help - -.PHONY: init -init: -ifndef HAVE_PIP - $(error "$(PIP) not available. Please run make help.") -endif -ifndef VIRTUAL_ENV - $(warning "No virtualenv active. Installing globally is not recommended.") -ifndef FORCE - $(error "Aborted. Run make FORCE=1 init to override or make help.") -endif -endif - pip install -r requirements.txt - -.PHONY: help -help: - @echo 'Available targets:' - @echo ' init: Install dependencies of maintenance scripts' - @echo ' check: Check maintenance scripts' - @echo ' release: Make a Flycheck release' - @echo '' - @echo 'You need Python 3.5 for all maintenance scripts' - @echo '' - @echo 'Run make init to install required libraries. It is recommended' - @echo 'that you use virtualenv (https://virtualenv.pypa.io/en/latest/)' - @echo 'to avoid a global installation of Python packages. make init' - @echo 'will warn you if you do not.' - -.PHONY: release -release: - @./release.py - -.PHONY: lint -lint: - $(FLAKE8) .. - -.PHONY: check -check: lint diff --git a/emacs.d/vendor/flycheck/maint/flycheck-checkdoc.el b/emacs.d/vendor/flycheck/maint/flycheck-checkdoc.el deleted file mode 100644 index ec74570..0000000 --- a/emacs.d/vendor/flycheck/maint/flycheck-checkdoc.el +++ /dev/null @@ -1,88 +0,0 @@ -;;; flycheck-checkdoc.el --- Flycheck: Checkdoc runner -*- lexical-binding: t; -*- - -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; This file provides checkdoc linting for Flycheck. It's intended for -;; non-interactive use, see "make checkdoc". - -;;; Code: - -(unless (version<= "25" emacs-version) - (user-error "Emacs 25 required for checkdoc")) - -(require 'subr-x) -(require 'seq) -(require 'f) -(require 'checkdoc) -(require 'flycheck-maint - (expand-file-name "flycheck-maint" - (file-name-directory (f-this-file)))) - -(defconst flycheck/source-dir (locate-dominating-file load-file-name "Cask") - "The source directory of Flycheck.") - -(defun flycheck/checkdoc-get-current-errors () - "Get the current checkdoc errors. - -Return a list of all error messages from checkdoc, and erase the -error message buffer, so that the next checkdoc check starts -fresh without previous errors. - -Each error is just a string with the complete human-readable -location and error message." - (with-current-buffer checkdoc-diagnostic-buffer - (unwind-protect - (progn - (goto-char (point-min)) - ;; Skip over the checkdoc header - (re-search-forward (rx line-start "***" (1+ not-newline) - ": checkdoc-current-buffer")) - (forward-line 1) - (let ((text (buffer-substring-no-properties (point) (point-max)))) - (and (not (string-empty-p text)) - (split-string text "\n")))) - (kill-buffer)))) - -(defun flycheck/checkdoc-file (filename) - "Run checkdoc on FILENAME and return a list of errors. - -Each error is just a string with the complete human-readable -location and error message." - (with-temp-buffer - ;; Visit the file to make sure that the filename is set, as some checkdoc - ;; lints only apply for buffers with filenames - (insert-file-contents filename 'visit) - (set-buffer-modified-p nil) - ;; Switch to Emacs Lisp mode to give checkdoc the proper syntax table, etc. - (delay-mode-hooks (emacs-lisp-mode)) - (setq delay-mode-hooks nil) - (let ((checkdoc-arguments-in-order-flag nil)) - (checkdoc-current-buffer 'take-notes)) - (flycheck/checkdoc-get-current-errors))) - -(defun flycheck/batch-checkdoc () - "Run checkdoc on all source files and exit." - (let ((errors (seq-mapcat #'flycheck/checkdoc-file - (flycheck/all-source-files)))) - (seq-do (lambda (err) (message "%s" err)) errors) - (kill-emacs (if errors 1 0)))) - -;;; flycheck-checkdoc.el ends here diff --git a/emacs.d/vendor/flycheck/maint/flycheck-compile.el b/emacs.d/vendor/flycheck/maint/flycheck-compile.el deleted file mode 100644 index 37b839a..0000000 --- a/emacs.d/vendor/flycheck/maint/flycheck-compile.el +++ /dev/null @@ -1,76 +0,0 @@ -;;; flycheck-compile.el --- Flycheck byte compiler -*- lexical-binding: t; -*- - -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; This file provides non-interactive byte compilation for Flycheck. -;; -;; It's essentially a wrapper around `batch-byte-compile' which sets some -;; additional byte compiler options for Flycheck. - -;;; Code: - -(require 'warnings) -(require 'bytecomp) - -(unless noninteractive - (error "This file must not be used interactively")) - -(defun flycheck/batch-byte-compile () - "Like `batch-byte-compile', but set additional flags. - -Specifically set `byte-compile-error-on-warn' to t on Emacs 25." - ;; Unfortunately `byte-compile-error-on-warn' does not quite what the name - ;; suggest because for whatever mysterious reason there's also - ;; `byte-compile-log-warning' used throughout Emacs' code which bypasses - ;; `byte-compile-error-on-warn' and instead logs an Emacs warning with - ;; `display-warning'. These warnings don't trigger errors even if - ;; `byte-compile-error-on-warn' is non-nil, which is… well, at least a very - ;; _unusual_ design decision, which leads the whole purpose of - ;; `byte-compile-error-on-warn' ad absurdum. - ;; - ;; To work around this mess (I'm sorry) we check the size of - ;; `byte-compile-log-buffer' after each file to check if any warnings end up - ;; there and exit with a non-zero code if the buffer is not empty. - ;; - ;; Unfortunately this means that we can't use `batch-byte-compile' (which is - ;; the proper API) and instead have to call the undocumented internal function - ;; `batch-byte-compile-file'. Yay, so now proper byte compilation of Flycheck - ;; depends on Emacs' internals, and much evil is accomplished. Can't get any - ;; worse, can it? - (let ((byte-compile-error-on-warn (version<= "25" emacs-version))) - (while command-line-args-left - (let ((filename (pop command-line-args-left))) - (unless (batch-byte-compile-file filename) - ;; Exit if compilation failed - (kill-emacs 1)) - (when (and byte-compile-error-on-warn - (get-buffer byte-compile-log-buffer) - (> (buffer-size (get-buffer byte-compile-log-buffer)) 0)) - ;; If there's anything in the log buffer (from the idiocy that is - ;; `byte-compile-log-warning') exit as well to _ALL_ warnings, really - ;; ALL WARNINGS. Got it, Emacs? Why are making my life so hard? At - ;; least we don't have to print the contents explicitly because - ;; `display-warnings' writes to standard whatever stream in batch - ;; mode. - (kill-emacs 1))))) - (kill-emacs 0)) - -;;; flycheck-compile.el ends here diff --git a/emacs.d/vendor/flycheck/maint/flycheck-format.el b/emacs.d/vendor/flycheck/maint/flycheck-format.el deleted file mode 100644 index 35681c9..0000000 --- a/emacs.d/vendor/flycheck/maint/flycheck-format.el +++ /dev/null @@ -1,151 +0,0 @@ -;;; flycheck-format.el --- Flycheck: Source code formatter -*- lexical-binding: t; -*- - -;; Copyright (C) 2016, 2018 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; This file provides source code formatting for Flycheck. It's mainly intended -;; for non-interactive use, see "make format". - -;;; Code: - -(unless (version<= "25" emacs-version) - (user-error "Emacs 25 required for formatting")) - -(require 'seq) -(require 'rx) -(require 'f) -(require 'whitespace) -(require 'elisp-mode) - -;; Work around Emacs bug #39761 -(require 'cl-lib) - -(require 'flycheck-maint - (expand-file-name "flycheck-maint" - (file-name-directory (f-this-file)))) - -(defun flycheck/eval-and-format-buffer (filename) - "Format the current buffer for FILENAME. - -THIS FUNCTION HAS GLOBAL AND LOCAL SIDE EFFECTS. - -Evaluate the buffer to make all special indentation rules of -local definitions available before formatting. - -Switch the buffer to Emacs Lisp mode." - (let (delayed-mode-hooks) - (delay-mode-hooks (emacs-lisp-mode))) - ;; Load the file to make indentation rules from local definitions available. - ;; We load files instead of evaluating them because some files in our code - ;; rely on `load-file-name' and similar stuff. Don't load files which are - ;; already loaded, though, to prevent a recursive load of this file. - (unless (flycheck/already-loaded-p filename) - (let ((load-prefer-newer t)) ; Silence "newer" messages - (load filename 'noerror 'nomessage 'nosuffix))) - (widen) - (let ((indent-tabs-mode nil) - (whitespace-style - '(empty ; Cleanup empty lines at end - indentation::space ; Replace tabs with spaces - space-before-tab::space ; Replace tabs with spaces - trailing ; Remove trailing spaces - ))) - (let ((inhibit-message t)) - ;; Silence "Indenting region..." progress reporter - (indent-region (point-min) (point-max))) - (whitespace-cleanup-region (point-min) (point-max)))) - -(defun flycheck/check-long-lines (filename &optional length) - "Check FILENAME for lines longer than LENGTH. - -Display a message for any line longer than LENGTH. If LENGTH is -nil, default to `fill-column'. Return t if FILENAME has no long -lines, otherwise return nil. - -If FILENAME is a package file, return t regardless if there are -long lines or not." - (let ((long-lines 0) - (max-length (or length fill-column))) - (save-excursion - (goto-char (point-min)) - ;; If the file has a Commentary line, then it's a package and we start - ;; checking for long lines after the Commentary section. Lines before it - ;; may be too long but some are unsplittable. - (when (search-forward ";;; Commentary:" nil t) - (while (not (eobp)) - (end-of-line) - (when (> (current-column) max-length) - (message "%s:%d: line is over %d characters" - filename - (line-number-at-pos (point)) - max-length) - (setq long-lines (1+ long-lines))) - (forward-line 1)))) - (= long-lines 0))) - -(defun flycheck/can-have-long-lines (filename) - "Whether FILENAME can have arbitrarily long lines. - -Test files which contain error messages from checkers are allowed -to have long lines." - (string-match-p (rx (or "languages/test-" "flycheck-test.el")) filename)) - -(defun flycheck/file-formatted-p (filename) - "Check whether FILENAME is properly formatted. - -Return a non-nil value in this case, otherwise return nil." - (with-temp-buffer - (insert-file-contents filename) - (set-buffer-modified-p nil) - (flycheck/eval-and-format-buffer filename) - (and (not (buffer-modified-p)) - (or (flycheck/can-have-long-lines filename) - (flycheck/check-long-lines filename 80))))) - -(defun flycheck/batch-check-format () - "Check formatting of all sources." - (let ((bad-files (seq-remove #'flycheck/file-formatted-p - (flycheck/all-source-files)))) - (if (null bad-files) - (kill-emacs 0) - (seq-do (lambda (filename) (message "%s: misformatted!" filename)) - bad-files) - (kill-emacs 1)))) - -(defun flycheck/format-file (filename) - "Format FILENAME. - -Return a non-nil value if the file was formatted, and nil -otherwise." - (with-temp-file filename - (insert-file-contents filename) - (set-buffer-modified-p nil) - (flycheck/eval-and-format-buffer filename) - (buffer-modified-p))) - -(defun flycheck/batch-format () - "Format all Flycheck source files." - (let ((formatted-files (seq-filter #'flycheck/format-file - (flycheck/all-source-files)))) - (seq-do (lambda (filename) (message "Formatted %s" filename)) - formatted-files) - (kill-emacs 0))) - -;;; flycheck-format.el ends here diff --git a/emacs.d/vendor/flycheck/maint/flycheck-maint.el b/emacs.d/vendor/flycheck/maint/flycheck-maint.el deleted file mode 100644 index f0f7979..0000000 --- a/emacs.d/vendor/flycheck/maint/flycheck-maint.el +++ /dev/null @@ -1,57 +0,0 @@ -;;; flycheck-maint.el --- Flycheck: Maintenance library -*- lexical-binding: t; -*- - -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; This file provides helper functions for maintenance tools. - -;;; Code: - -(unless noninteractive - (error "This file must not be used interactively")) - -(defconst flycheck/source-dir (locate-dominating-file load-file-name "Cask") - "The source directory of Flycheck.") - -(defun flycheck/collect-el-files (directory &optional recursive) - "Collect all Emacs Lisp files in DIRECTORY. - -If RECURSIVE is given and non-nil collect files recursively." - (let ((fn-re (rx ".el" eos))) - (if recursive - (directory-files-recursively directory fn-re) - (directory-files directory 'full fn-re)))) - -(defun flycheck/all-source-files () - "Find all source files of Flycheck." - (append - (seq-mapcat (lambda (rel-name) - (flycheck/collect-el-files - (expand-file-name rel-name flycheck/source-dir))) - '("." "maint/" "doc/" "test/")) - (flycheck/collect-el-files - (expand-file-name "test/specs/" flycheck/source-dir) 'recursive))) - -(defun flycheck/already-loaded-p (filename) - "Whether FILENAME is already loaded." - (not (null (assoc filename load-history)))) - -(provide 'flycheck-maint) -;;; flycheck-maint.el ends here diff --git a/emacs.d/vendor/flycheck/maint/release.py b/emacs.d/vendor/flycheck/maint/release.py deleted file mode 100755 index 3e8a16c..0000000 --- a/emacs.d/vendor/flycheck/maint/release.py +++ /dev/null @@ -1,201 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (C) 2017 Flycheck contributors -# Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -# This file is not part of GNU Emacs. - -# 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 3 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 . - -import re -import sys -import subprocess -from datetime import date -from collections import namedtuple -from pathlib import Path - -import requests -from git import Repo - - -SOURCE_DIR = Path(__file__).resolve().parent.parent -FLYCHECK_EL = SOURCE_DIR.joinpath('flycheck.el') -CHANGELOG = SOURCE_DIR.joinpath('CHANGES.rst') - -TRAVIS_ENDPOINT = 'https://api.travis-ci.org/repos/flycheck/flycheck' - -VERSION_HEADER_RE = re.compile( - r'^(?P' requested here" - :checker c/c++-clang) - '(8 9 warning "unknown pragma ignored" - :checker c/c++-clang)))) - -(flycheck-ert-def-checker-test c/c++-clang (c c++) fatal-error - (let ((flycheck-disabled-checkers '(c/c++-gcc))) - (flycheck-ert-should-syntax-check - "language/c_c++/includes.c" 'c-mode - '(2 10 error "'library.h' file not found" - :checker c/c++-clang)))) - -(flycheck-ert-def-checker-test c/c++-clang (c c++) warnings - (let ((flycheck-disabled-checkers '(c/c++-gcc c/c++-cppcheck))) - (flycheck-ert-should-syntax-check - "language/c_c++/warning.c" 'c-mode - '(5 10 warning "unused variable 'unused'" :checker c/c++-clang) - '(7 15 warning "comparison of integers of different signs: 'int' and 'unsigned int'" - :checker c/c++-clang) - '(8 7 warning "no message" :checker c/c++-clang)))) - -(flycheck-ert-def-checker-test c/c++-clang (c c++) included-file-warning - (let ((flycheck-clang-include-path '("./include")) - (flycheck-disabled-checkers '(c/c++-gcc)) - (flycheck-relevant-error-other-file-minimum-level 'warning)) - (flycheck-ert-should-syntax-check - "language/c_c++/in-included-file.cpp" 'c++-mode - `(5 10 warning "unused variable 'unused'" - :filename ,(flycheck-ert-resource-filename "language/c_c++/warning.c") - :checker c/c++-clang) - `(7 15 warning "comparison of integers of different signs: 'int' and 'unsigned int'" - :filename ,(flycheck-ert-resource-filename "language/c_c++/warning.c") - :checker c/c++-clang) - `(8 7 warning "no message" - :filename ,(flycheck-ert-resource-filename "language/c_c++/warning.c") - :checker c/c++-clang)))) - -(flycheck-ert-def-checker-test c/c++-gcc (c c++) error - (let ((flycheck-disabled-checkers '(c/c++-clang))) - (flycheck-ert-should-syntax-check - "language/c_c++/error.cpp" 'c++-mode - '(2 20 error "'struct A' has no member named 'bar'" - :checker c/c++-gcc) - '(8 nil warning "ignoring #pragma nope" - :id "-Wunknown-pragmas" :checker c/c++-gcc)))) - -(flycheck-ert-def-checker-test c/c++-gcc (c c++) fatal-error - (let ((flycheck-disabled-checkers '(c/c++-clang))) - (flycheck-ert-should-syntax-check - "language/c_c++/includes.c" 'c-mode - '(2 10 error "library.h: No such file or directory" - :checker c/c++-gcc)))) - -(flycheck-ert-def-checker-test c/c++-gcc (c c++) warning - (let ((flycheck-disabled-checkers '(c/c++-clang c/c++-cppcheck))) - (flycheck-ert-should-syntax-check - "language/c_c++/warning.c" 'c-mode - '(5 10 warning "unused variable 'unused'" - :id "-Wunused-variable" :checker c/c++-gcc) - '(7 15 warning "comparison of integer expressions of different signedness: 'int' and 'unsigned int'" - :id "-Wsign-compare" :checker c/c++-gcc) - '(8 7 warning "#warning" :id "-Wcpp" :checker c/c++-gcc)))) - -(flycheck-ert-def-checker-test c/c++-gcc (c c++) included-file-warning - (let ((flycheck-gcc-include-path '("./include")) - (flycheck-disabled-checkers '(c/c++-clang)) - (flycheck-relevant-error-other-file-minimum-level 'warning)) - (flycheck-ert-should-syntax-check - "language/c_c++/in-included-file.cpp" 'c++-mode - `(5 10 warning "unused variable 'unused'" - :filename ,(flycheck-ert-resource-filename "language/c_c++/warning.c") - :id "-Wunused-variable" :checker c/c++-gcc) - `(7 15 warning "comparison of integer expressions of different signedness: 'int' and 'unsigned int'" - :filename ,(flycheck-ert-resource-filename "language/c_c++/warning.c") - :id "-Wsign-compare" :checker c/c++-gcc) - `(8 7 warning "#warning" - :filename ,(flycheck-ert-resource-filename "language/c_c++/warning.c") - :id "-Wcpp" :checker c/c++-gcc)))) - -(flycheck-ert-def-checker-test c/c++-cppcheck (c c++) nil - :tags '(cppcheck-xml) - (let ((flycheck-disabled-checkers '(c/c++-clang c/c++-gcc)) - (flycheck-cppcheck-inconclusive nil) - (flycheck-cppcheck-checks '("style"))) - (flycheck-ert-should-syntax-check - "language/c_c++/style2.cpp" 'c++-mode - '(3 nil info "The scope of the variable 'i' can be reduced. Warning: Be careful when fixing this message, especially when there are inner loops. Here is an example where cppcheck will write that the scope for 'i' can be reduced:\nvoid f(int x)\n{\n int i = 0;\n if (x) {\n // it's safe to move 'int i = 0;' here\n for (int n = 0; n < 10; ++n) {\n // it is possible but not safe to move 'int i = 0;' here\n do_something(&i);\n }\n }\n}\nWhen you see this message it is always safe to reduce the variable scope 1 level." - :id "variableScope" :checker c/c++-cppcheck)) - - (flycheck-ert-should-syntax-check - "language/c_c++/style.cpp" 'c-mode - '(12 nil error "Code 'std::string' is invalid C code. Use --std or --language to configure the language." - :id "syntaxError" :checker c/c++-cppcheck)) - - (flycheck-ert-should-syntax-check - "language/c_c++/style.cpp" 'c++-mode - '(3 nil error "Division by zero." :id "zerodiv" :checker c/c++-cppcheck) - '(5 nil info "Unused variable: unused" :id "unusedVariable" - :checker c/c++-cppcheck) - '(9 nil error "Division by zero." :id "zerodiv" :checker c/c++-cppcheck) - '(12 nil warning "Parameter 'foo' is passed by value. It could be passed as a const reference which is usually faster and recommended in C++." - :id "passedByValue" :checker c/c++-cppcheck)))) - -(flycheck-ert-def-checker-test cfengine cfengine error - (skip-unless (fboundp 'cfengine3-mode)) - (flycheck-ert-should-syntax-check - "language/cfengine/error.cf" 'cfengine3-mode - '(8 21 error "Unknown promise type 'nosuchpromisetype'" :checker cfengine))) - -(flycheck-ert-def-checker-test cfengine cfengine warning - (skip-unless (fboundp 'cfengine3-mode)) - (flycheck-ert-should-syntax-check - "language/cfengine/warning.cf" 'cfengine3-mode - '(3 35 warning "Removed constraint 'host_licenses_paid' in promise type 'common' [-Wremoved]" - :checker cfengine))) - -(flycheck-ert-def-checker-test chef-foodcritic chef nil - (flycheck-ert-should-syntax-check - "language/chef/recipes/error.rb" 'ruby-mode - `(1 nil error "Missing README in markdown format" - :checker chef-foodcritic :id "FC011" - :filename ,(flycheck-ert-resource-filename "language/chef/README.md")) - `(1 nil error "Cookbook without metadata.rb file" - :checker chef-foodcritic :id "FC031" - :filename ,(flycheck-ert-resource-filename "language/chef/metadata.rb")) - `(1 nil error "Missing LICENSE file" - :checker chef-foodcritic :id "FC071" - :filename ,(flycheck-ert-resource-filename "language/chef/LICENSE")) - '(3 nil error "Avoid string interpolation where not required" - :checker chef-foodcritic :id "FC002") - '(11 nil error "Use a service resource to start and stop services" - :checker chef-foodcritic :id "FC004"))) - -(flycheck-ert-def-checker-test coffee coffee syntax-error - (flycheck-ert-should-syntax-check - "language/coffee/syntax-error.coffee" 'coffee-mode - '(4 7 error "missing \"" :checker coffee))) - -(flycheck-ert-def-checker-test coffee-coffeelint coffee error - :tags '(checkstyle-xml) - (flycheck-ert-should-syntax-check - "language/coffee/error.coffee" 'coffee-mode - '(4 nil error "Throwing strings is forbidden; context:" - :checker coffee-coffeelint))) - -(flycheck-ert-def-checker-test coffee-coffeelint coffee warning - :tags '(checkstyle-xml) - (let ((flycheck-coffeelintrc "lint.json")) - (flycheck-ert-should-syntax-check - "language/coffee/error.coffee" 'coffee-mode - '(4 nil warning "Throwing strings is forbidden; context:" - :checker coffee-coffeelint)))) - -(flycheck-ert-def-checker-test coq coq syntax-error - (skip-unless (shut-up (load "gallina" 'noerror 'nomessage))) - (flycheck-ert-should-syntax-check - "language/coq/syntax-error.v" 'coq-mode - '(6 12 error "\'end\' expected after [branches] (in [match_constr])." - :checker coq - :end-line 6 - :end-column 14))) - -(flycheck-ert-def-checker-test coq coq error - (skip-unless (shut-up (load "gallina" 'noerror 'nomessage))) - (flycheck-ert-should-syntax-check - "language/coq/error.v" 'coq-mode - '(7 21 error "In environment -evenb : nat -> bool -n : nat -n0 : nat -n' : nat -The term \"1\" has type \"nat\" while it is expected to have type \"bool\"." - :checker coq - :end-line 7 - :end-column 22))) - -(flycheck-ert-def-checker-test css-csslint css nil - :tags '(checkstyle-xml) - (flycheck-ert-should-syntax-check - "language/css/warning.css" 'css-mode - '(3 6 warning "Heading (h1) should not be qualified." - :id "Disallowqualifiedheadings" :checker css-csslint))) - -(flycheck-ert-def-checker-test css-csslint css syntax-error - :tags '(checkstyle-xml) - (flycheck-ert-should-syntax-check - "language/css/syntax-error.css" 'css-mode - '(4 14 error "Expected a `FUNCTION` or `IDENT` after colon at line 4, col 14." - :id "ParsingErrors" :checker css-csslint))) - -(flycheck-ert-def-checker-test cuda cuda syntax-error - (flycheck-ert-should-syntax-check - "language/cuda/syntax-error.cu" 'cuda-mode - '(5 0 error "error: identifier \"ac\" is undefined" - :checker cuda))) - -(flycheck-ert-def-checker-test cuda cuda syntax-warning - (flycheck-ert-should-syntax-check - "language/cuda/syntax-warning.cu" 'cuda-mode - '(3 0 warning "variable \"b\" was set but never used" - :checker cuda))) - -(flycheck-ert-def-checker-test cwl cwl syntax-error - (let ((flycheck-cwl-schema-path "schema/CommonWorkflowLanguage.yml")) - (flycheck-ert-should-syntax-check - "language/cwl/cwl.cwl" 'cwl-mode - '(6 5 error "value is a str, expected null or CommandLineBinding" - :checker cwl)))) - -(ert-deftest flycheck-d-module-re/matches-module-name () - :tags '(language-d) - (unless (version<= "24.4" emacs-version) - (ert-skip "Skipped because CC Mode is broken on 24.3. -See https://github.com/flycheck/flycheck/issues/531 and Emacs bug #19206")) - (let ((s "module spam.with.eggs ;")) - (should (string-match flycheck-d-module-re s)) - (should (string= "spam.with.eggs" (match-string 1 s))))) - -(ert-deftest flycheck-d-base-directory/no-module-declaration () - :tags '(language-d) - (unless (version<= "24.4" emacs-version) - (ert-skip "Skipped because CC Mode is broken on 24.3. -See https://github.com/flycheck/flycheck/issues/531 and Emacs bug #19206")) - (flycheck-ert-with-resource-buffer "language/d/src/dmd/no_module.d" - (should (flycheck-same-files-p - (flycheck-d-base-directory) - (flycheck-ert-resource-filename "language/d/src/dmd"))))) - -(ert-deftest flycheck-d-base-directory/with-module-declaration () - :tags '(language-d) - (unless (version<= "24.4" emacs-version) - (ert-skip "Skipped because CC Mode is broken on 24.3. -See https://github.com/flycheck/flycheck/issues/531 and Emacs bug #19206")) - (flycheck-ert-with-resource-buffer "language/d/src/dmd/warning.d" - (should (flycheck-same-files-p - (flycheck-d-base-directory) - (flycheck-ert-resource-filename "language/d/src"))))) - -(ert-deftest flycheck-d-base-directory/package-file () - :tags '(language-d) - (unless (version<= "24.4" emacs-version) - (ert-skip "Skipped because CC Mode is broken on 24.3. -See https://github.com/flycheck/flycheck/issues/531 and Emacs bug #19206")) - (flycheck-ert-with-resource-buffer "language/d/src/dmd/package.d" - (should (flycheck-same-files-p - (flycheck-d-base-directory) - (flycheck-ert-resource-filename "language/d/src"))))) - -(flycheck-ert-def-checker-test d-dmd d warning-include-path - (unless (version<= "24.4" emacs-version) - (ert-skip "Skipped because CC Mode is broken on 24.3. -See https://github.com/flycheck/flycheck/issues/531 and Emacs bug #19206")) - (let ((flycheck-dmd-include-path '("../../lib"))) - (flycheck-ert-should-syntax-check - "language/d/src/dmd/warning.d" 'd-mode - '(9 5 warning "statement is not reachable" :checker d-dmd) - '(20 17 warning "function `dmd.warning.bar` is deprecated" - :checker d-dmd)))) - -(flycheck-ert-def-checker-test d-dmd d missing-import - (unless (version<= "24.4" emacs-version) - (ert-skip "Skipped because CC Mode is broken on 24.3. -See https://github.com/flycheck/flycheck/issues/531 and Emacs bug #19206")) - (flycheck-ert-should-syntax-check - "language/d/src/dmd/warning.d" 'd-mode - '(4 8 error "module `external_library` is in file 'external_library.d' which cannot be read" - :checker d-dmd))) - -(flycheck-ert-def-checker-test d-dmd d continuation-line - (unless (version<= "24.4" emacs-version) - (ert-skip "Skipped because CC Mode is broken on 24.3. -See https://github.com/flycheck/flycheck/issues/531 and Emacs bug #19206")) - (flycheck-ert-should-syntax-check - "language/d/src/dmd/continuation.d" 'd-mode - '(5 12 error "undefined identifier `invalid`" - :checker d-dmd) - '(10 12 error "template instance `continuation.T!()` error instantiating" - :checker d-dmd) - '(13 1 info "instantiated from here: `U!()`" - :checker d-dmd))) - -(flycheck-ert-def-checker-test d-dmd d non-d-extension - (skip-unless (fboundp 'd-mode)) - (unless (version<= "24.4" emacs-version) - (ert-skip "Skipped because CC Mode is broken on 24.3. -See https://github.com/flycheck/flycheck/issues/531 and Emacs bug #19206")) - (flycheck-ert-with-temp-buffer - (insert "!invalid") - (d-mode) - (flycheck-ert-buffer-sync) - (flycheck-ert-should-errors - '(1 1 error "declaration expected, not `!`" - :checker d-dmd)))) - -(flycheck-ert-def-checker-test dockerfile-hadolint dockerfile error - (flycheck-ert-should-syntax-check - "language/dockerfile/Dockerfile.error" 'dockerfile-mode - '(2 1 error "unexpected 'I' expecting '#', '\\', ADD, ARG, CMD, COPY, ENTRYPOINT, ENV, EXPOSE, FROM, HEALTHCHECK, LABEL, MAINTAINER, ONBUILD, RUN, SHELL, STOPSIGNAL, USER, VOLUME, WORKDIR, at least one space, or end of input" - :checker dockerfile-hadolint))) - -(flycheck-ert-def-checker-test dockerfile-hadolint dockerfile warnings - (flycheck-ert-should-syntax-check - "language/dockerfile/Dockerfile.warning" 'dockerfile-mode - '(1 nil warning "Always tag the version of an image explicitly" - :id "DL3006" :checker dockerfile-hadolint) - '(2 nil warning "Do not use apt-get upgrade or dist-upgrade" - :id "DL3005" :checker dockerfile-hadolint) - '(2 nil warning "Delete the apt-get lists after installing something" - :id "DL3009" :checker dockerfile-hadolint) - '(3 nil warning "Use absolute WORKDIR" - :id "DL3000" :checker dockerfile-hadolint))) - -(flycheck-ert-def-checker-test elixir-credo elixir infos-without-strict-mode - (flycheck-ert-should-syntax-check - "language/elixir/lib/infos.ex" 'elixir-mode - '(1 11 info "Modules should have a @moduledoc tag." - :checker elixir-credo))) - -(flycheck-ert-def-checker-test elixir-credo elixir infos-with-strict-mode - (let ((flycheck-elixir-credo-strict t)) - (flycheck-ert-should-syntax-check - "language/elixir/lib/infos.ex" 'elixir-mode - '(1 11 info "Modules should have a @moduledoc tag." - :checker elixir-credo) - '(2 nil info "Do not use parentheses when defining a function which has no arguments." - :checker elixir-credo)))) - -(flycheck-ert-def-checker-test elixir-credo elixir warnings - (flycheck-ert-should-syntax-check - "language/elixir/lib/warnings.ex" 'elixir-mode - '(5 nil warning "There are identical sub-expressions to the left and to the right of the '&&' operator." - :checker elixir-credo) - '(8 8 warning "length(list) == 0 is expensive. Prefer Enum.empty?/1 or list == []" - :checker elixir-credo))) - -(flycheck-ert-def-checker-test (emacs-lisp emacs-lisp-checkdoc) emacs-lisp nil - (flycheck-ert-should-syntax-check - "language/emacs-lisp/warnings.el" 'emacs-lisp-mode - '(12 nil info "First sentence should end with punctuation" - :checker emacs-lisp-checkdoc) - '(16 6 warning "foobar called with 1 argument, but accepts only 0" - :checker emacs-lisp) - '(21 1 warning "the function `dummy-package-foo' is not known to be defined." - :checker emacs-lisp ))) - -(flycheck-ert-def-checker-test (emacs-lisp emacs-lisp-checkdoc) emacs-lisp - uses-right-major-mode - (flycheck-ert-should-syntax-check - "language/emacs-lisp/checkdoc-elisp-mode-regression.el" 'emacs-lisp-mode - '(11 nil info "All variables and subroutines might as well have a documentation string" - :checker emacs-lisp-checkdoc))) - -(flycheck-ert-def-checker-test (emacs-lisp-checkdoc) emacs-lisp - inherits-checkdoc-variables - ;; This test doesn't run on 24.3 and earlier because the corresponding - ;; checkdoc variables were only introduced in 24.4. - (skip-unless (version<= "24.4" emacs-version)) - (flycheck-ert-should-syntax-check - "language/emacs-lisp/local-checkdoc-variables.el" 'emacs-lisp-mode)) - -(flycheck-ert-def-checker-test (emacs-lisp emacs-lisp-checkdoc) emacs-lisp - checks-compressed-file - (let ((inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/emacs-lisp/warnings.el.gz" 'emacs-lisp-mode - '(12 nil info "First sentence should end with punctuation" - :checker emacs-lisp-checkdoc) - '(16 6 warning "foobar called with 1 argument, but accepts only 0" - :checker emacs-lisp) - '(21 1 warning "the function `dummy-package-foo' is not known to be defined." - :checker emacs-lisp)))) - -(flycheck-ert-def-checker-test emacs-lisp emacs-lisp syntax-error - (let ((flycheck-disabled-checkers '(emacs-lisp-checkdoc))) - (flycheck-ert-should-syntax-check - "language/emacs-lisp/syntax-error.el" 'emacs-lisp-mode - '(3 1 error "End of file during parsing" :checker emacs-lisp)))) - -(flycheck-ert-def-checker-test (emacs-lisp emacs-lisp-checkdoc) emacs-lisp - without-file-name - ;; Regression test for checkdoc in buffers without file names. See - ;; https://github.com/flycheck/flycheck/issues/73 and - ;; https://github.com/bbatsov/prelude/issues/259 - (flycheck-ert-with-resource-buffer "language/emacs-lisp/warnings.el" - (set-visited-file-name nil 'no-query) - (emacs-lisp-mode) - (should-not (buffer-file-name)) - (flycheck-ert-buffer-sync) - ;; TODO: Consider whether checkdoc is really useful in buffers without file - ;; names… - (should flycheck-current-errors))) - -(flycheck-ert-def-checker-test (emacs-lisp emacs-lisp-checkdoc) emacs-lisp - does-not-check-autoloads-buffers - ;; Regression test ensuring that Emacs Lisp won't check autoload buffers. - ;; These buffers are temporary buffers created during package installation to - ;; collect the autoloads of newly installed packages before writing the - ;; autoloads file. See `https://github.com/flycheck/flycheck/issues/45' and - ;; `https://github.com/bbatsov/prelude/issues/253' for details. - (flycheck-ert-with-file-buffer (locate-library "shut-up-autoloads") - (should-not (flycheck-may-use-checker 'emacs-lisp)) - (should-not (flycheck-may-use-checker 'emacs-lisp-checkdoc)))) - -(flycheck-ert-def-checker-test (emacs-lisp emacs-lisp-checkdoc) emacs-lisp - checkdoc-does-not-check-cask-files - (flycheck-ert-with-file-buffer - (expand-file-name "Cask" flycheck-test-source-directory) - (should-not (flycheck-may-use-checker 'emacs-lisp-checkdoc)))) - -(flycheck-ert-def-checker-test (emacs-lisp emacs-lisp-checkdoc) emacs-lisp - does-not-check-with-no-byte-compile - ;; We need to use a hook here, because `no-byte-compile' seems to be - ;; explicitly changed when loading Emacs Lisp files - (let ((disable-byte-comp (lambda () (setq-local no-byte-compile t)))) - (add-hook 'emacs-lisp-mode-hook disable-byte-comp) - (unwind-protect - (flycheck-ert-should-syntax-check - "language/emacs-lisp/warnings.el" 'emacs-lisp-mode - '(12 nil info "First sentence should end with punctuation" - :checker emacs-lisp-checkdoc)) - (remove-hook 'emacs-lisp-mode-hook disable-byte-comp)))) - -(flycheck-ert-def-checker-test emacs-lisp emacs-lisp check-declare-warnings - (let ((flycheck-emacs-lisp-check-declare t)) - (flycheck-ert-should-syntax-check - "language/emacs-lisp/check-declare-warnings.el" 'emacs-lisp-mode - (cond - ((version< emacs-version "25") - '(0 nil warning "`this-function-is-not-declared' was defined in this-file-does-not-exist.el: file not found" - :checker emacs-lisp)) - ((version< emacs-version "26") - '(9 1 warning "`this-function-is-not-declared' was defined in this-file-does-not-exist.el: file not found" - :checker emacs-lisp)) - (t - '(9 nil warning "`this-function-is-not-declared' was defined in this-file-does-not-exist.el: file not found" - :checker emacs-lisp)))))) - -(flycheck-ert-def-checker-test emacs-lisp emacs-lisp disable-check-declare - (let ((flycheck-emacs-lisp-check-declare nil)) - (flycheck-ert-should-syntax-check - "language/emacs-lisp/check-declare-warnings.el" 'emacs-lisp-mode))) - -(flycheck-ert-def-checker-test ember-template ember-template error - (flycheck-ert-should-syntax-check - "language/ember-template-lint/ember-template-lint/error.hbs" 'web-mode - '(2 16 error "Incorrect indentation for `` beginning at L2:C16. Expected `` to be at an indentation of 2 but was found at 16." :id "block-indentation" :checker ember-template))) - -(flycheck-ert-def-checker-test ember-template ember-template warning - (flycheck-ert-should-syntax-check - "language/ember-template-lint/ember-template-lint/warning.hbs" 'web-mode - '(1 nil warning "Non-translated string used" :id "no-bare-strings" :checker ember-template))) - -(flycheck-ert-def-checker-test erlang erlang error - (shut-up - (flycheck-ert-should-syntax-check - "language/erlang/erlang/error.erl" 'erlang-mode - '(3 nil warning "export_all flag enabled - all functions will be exported" :checker erlang) - '(7 nil error "head mismatch" :checker erlang)))) - -(flycheck-ert-def-checker-test erlang erlang warning - (flycheck-ert-should-syntax-check - "language/erlang/erlang/warning.erl" 'erlang-mode - '(3 nil warning "export_all flag enabled - all functions will be exported" :checker erlang) - '(6 nil warning "wrong number of arguments in format call" :checker erlang))) - -(flycheck-ert-def-checker-test erlang-rebar3 erlang error - (flycheck-ert-should-syntax-check - "language/erlang/rebar3/src/erlang-error.erl" 'erlang-mode - '(3 nil warning "export_all flag enabled - all functions will be exported" :checker erlang-rebar3) - '(7 nil error "head mismatch" :checker erlang-rebar3))) - -(flycheck-ert-def-checker-test erlang-rebar3 erlang build - (shut-up - (flycheck-ert-should-syntax-check - "language/erlang/rebar3/_checkouts/dependency/src/dependency.erl" 'erlang-mode - `(7 nil error "head mismatch" :checker erlang-rebar3 - :filename ,(flycheck-ert-resource-filename "language/erlang/rebar3/src/erlang-error.erl")))) - ;; Ensure that the dependency file wasn't built as standalone - ;; project which would create a separate _build directory - (should (not (file-exists-p - (flycheck-ert-resource-filename - "language/erlang/rebar3/_build/default/lib/dependency/_build"))))) - -(flycheck-ert-def-checker-test eruby-erubis eruby nil - (let ((flycheck-disabled-checkers '(eruby-ruumba))) - (flycheck-ert-should-syntax-check - "language/eruby.erb" '(html-erb-mode rhtml-mode) - '(9 nil error "syntax error, unexpected end-of-input, expecting `end'" :checker eruby-erubis)))) - -(flycheck-ert-def-checker-test eruby-ruumba eruby syntax-error - (let ((flycheck-disabled-checkers '(eruby-erubis))) - (flycheck-ert-should-syntax-check - "language/eruby.erb" '(html-erb-mode rhtml-mode) - '(8 1 error "unexpected token $end (Using Ruby 2.4 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)" - :id "Lint/Syntax" :checker eruby-ruumba)))) - -(flycheck-ert-def-checker-test fortran-gfortran fortran error - (flycheck-ert-should-syntax-check - "language/fortran/error.f" '(fortran-mode f90-mode) - '(1 1 error "Non-numeric character in statement label at (1)" - :checker fortran-gfortran) - '(2 1 error "Non-numeric character in statement label at (1)" - :checker fortran-gfortran) - '(3 1 error "Non-numeric character in statement label at (1)" - :checker fortran-gfortran))) - -(flycheck-ert-def-checker-test fortran-gfortran fortran free-form-error - (let ((flycheck-gfortran-layout 'free)) - (flycheck-ert-should-syntax-check - "language/fortran/error.f" '(fortran-mode f90-mode) - '(3 3 error "Expecting END PROGRAM statement at (1)" - :checker fortran-gfortran)))) - -(flycheck-ert-def-checker-test fortran-gfortran fortran warning - (flycheck-ert-should-syntax-check - "language/fortran/warning.f90" '(fortran-mode f90-mode) - '(1 20 warning "Unused dummy argument 'p' at (1)" - :checker fortran-gfortran) - '(18 9 warning "Same actual argument associated with INTENT(IN) argument 'a' and INTENT(OUT) argument 'b' at (1)" - :checker fortran-gfortran))) - -(flycheck-ert-def-checker-test go-gofmt go syntax-error - (flycheck-ert-should-syntax-check - "language/go/src/syntax/syntax-error.go" 'go-mode - '(5 9 error "expected '(', found ta" :checker go-gofmt) - '(6 1 error "expected declaration, found '}'" :checker go-gofmt))) - -(flycheck-ert-def-checker-test (go-build go-golint go-vet) go complete-chain - (flycheck-ert-with-env - `(("GOPATH" . ,(flycheck-ert-resource-filename "language/go"))) - (flycheck-ert-should-syntax-check - "language/go/src/warnings.go" 'go-mode - '(4 2 error "imported and not used: \"fmt\"" :checker go-build) - '(4 2 warning "should not use dot imports" :checker go-golint) - '(7 1 warning "exported function Warn should have comment or be unexported" - :checker go-golint) - '(8 2 error "undefined: fmt" :checker go-build) - '(11 1 warning "exported function Warnf should have comment or be unexported" - :checker go-golint) - '(12 2 error "undefined: fmt" :checker go-build) - '(17 2 error "undefined: fmt" :checker go-build) - '(19 13 error "cannot use 1 (type untyped int) as type string in argument to Warnf" - :checker go-build) - '(25 9 warning "if block ends with a return statement, so drop this else and outdent its block" - :checker go-golint)))) - -(flycheck-ert-def-checker-test go-build go handles-packages - (flycheck-ert-with-env - `(("GOPATH" . ,(flycheck-ert-resource-filename "language/go"))) - (flycheck-ert-should-syntax-check "language/go/src/b1/main.go" 'go-mode))) - -(flycheck-ert-def-checker-test go-build go missing-package - (let ((go-root (or (getenv "GOROOT") "/usr/local/go")) - (go-path (concat (getenv "HOME") "/go"))) - (flycheck-ert-with-env '(("GOPATH" . nil)) - (flycheck-ert-should-syntax-check - "language/go/src/b1/main.go" 'go-mode - `(4 2 error ,(format "cannot find package \"b2\" in any of:\n\t%s/src/b2 (from $GOROOT)\n\t%s/src/b2 (from $GOPATH)" - go-root go-path) - :checker go-build))))) - -(flycheck-ert-def-checker-test go-test go nil - (flycheck-ert-with-env - `(("GOPATH" . ,(flycheck-ert-resource-filename "checkers/go"))) - (flycheck-ert-should-syntax-check - "language/go/src/test/test-error_test.go" 'go-mode - '(8 2 error "undefined: fmt" :checker go-test)))) - -(flycheck-ert-def-checker-test go-errcheck go nil - (flycheck-ert-with-env - `(("GOPATH" . ,(flycheck-ert-resource-filename "language/go"))) - (flycheck-ert-should-syntax-check - "language/go/src/errcheck/errcheck.go" 'go-mode - '(7 9 warning "Ignored `error` returned from `f.Close()`" - :checker go-errcheck) - '(9 9 warning "Ignored `error` returned from `os.Stat(\"enoent\")`" - :checker go-errcheck)))) - -(flycheck-ert-def-checker-test go-unconvert go nil - :tags '(language-go external-tool) - (flycheck-ert-with-env - `(("GOPATH" . ,(flycheck-ert-resource-filename "language/go"))) - (flycheck-ert-should-syntax-check - "language/go/src/unconvert/unconvert.go" 'go-mode - '(7 17 warning "unnecessary conversion" - :checker go-unconvert)))) - -(flycheck-ert-def-checker-test go-staticcheck go nil - :tags '(language-go external-tool) - (let ((flycheck-disabled-checkers '(go-golint go-unconvert))) - (flycheck-ert-with-env - `(("GOPATH" . ,(flycheck-ert-resource-filename "language/go"))) - (flycheck-ert-should-syntax-check - "language/go/src/staticcheck/staticcheck1.go" 'go-mode - '(8 6 error "unnecessary assignment to the blank identifier" - :checker go-staticcheck :id "S1005") - '(12 39 error "calling strings.Replace with n == 0 will return no results, did you mean -1?" - :checker go-staticcheck :id "SA1018") - '(16 6 error "func unused is unused" - :checker go-staticcheck :id "U1000"))))) - -(flycheck-ert-def-checker-test groovy groovy syntax-error - ;; Work around - ;; https://github.com/Groovy-Emacs-Modes/groovy-emacs-modes/issues/11 - (require 'cl) - (flycheck-ert-should-syntax-check - "language/groovy.groovy" 'groovy-mode - '(2 14 error "unexpected token: {" :checker groovy))) - -(flycheck-ert-def-checker-test haml haml "haml-error" - (flycheck-ert-should-syntax-check - "language/haml/haml-error.haml" 'haml-mode - '(5 nil error "Inconsistent indentation: 3 spaces used for indentation, but the rest of the document was indented using 2 spaces." - :checker haml))) - -(flycheck-ert-def-checker-test haml haml "ruby-error" - (flycheck-ert-should-syntax-check - "language/haml/ruby-error.haml" 'haml-mode - '(1 nil error "unexpected end-of-input" - :checker haml))) - -(flycheck-ert-def-checker-test handlebars handlebars nil - (flycheck-ert-should-syntax-check - "language/handlebars.hbs" '(handlebars-mode web-mode) - '(2 nil error "Expecting 'ID', 'STRING', 'NUMBER', 'BOOLEAN', 'UNDEFINED', 'NULL', 'DATA', got 'INVALID'" - :checker handlebars))) - -(flycheck-ert-def-checker-test haskell-stack-ghc haskell syntax-error - (skip-unless (file-exists-p (getenv "HOME"))) - (let ((flycheck-disabled-checkers '(haskell-ghc))) - (flycheck-ert-should-syntax-check - "language/haskell/SyntaxError.hs" 'haskell-mode - '(3 1 error "parse error on input `module'" :checker haskell-stack-ghc)))) - -(flycheck-ert-def-checker-test haskell-stack-ghc haskell type-error - (skip-unless (file-exists-p (getenv "HOME"))) - (let ((flycheck-disabled-checkers '(haskell-ghc))) - (flycheck-ert-should-syntax-check - "language/haskell/Error.hs" 'haskell-mode - '(4 16 error "* Couldn't match type `Bool' with `[Char]' - Expected type: String - Actual type: Bool -* In the first argument of `putStrLn', namely `True' - In the expression: putStrLn True - In an equation for `foo': foo = putStrLn True" :checker haskell-stack-ghc)))) - -(flycheck-ert-def-checker-test (haskell-stack-ghc haskell-hlint) haskell literate - (skip-unless (file-exists-p (getenv "HOME"))) - (let ((flycheck-disabled-checkers '(haskell-ghc))) - (flycheck-ert-should-syntax-check - "language/haskell/Literate.lhs" 'haskell-literate-mode - '(6 1 warning "Top-level binding with no type signature: foo :: a" - :id "-Wmissing-signatures" - :checker haskell-stack-ghc)))) - -(flycheck-ert-def-checker-test (haskell-stack-ghc haskell-hlint) haskell - complete-chain - (skip-unless (file-exists-p (getenv "HOME"))) - (let ((flycheck-disabled-checkers '(haskell-ghc))) - (flycheck-ert-should-syntax-check - "language/haskell/Warnings.hs" 'haskell-mode - '(4 1 warning "Eta reduce -Found: - spam eggs = map lines eggs -Perhaps: - spam = map lines" :checker haskell-hlint) - '(4 1 warning "Top-level binding with no type signature: - spam :: [String] -> [[String]]" - :id "-Wmissing-signatures" - :checker haskell-stack-ghc) - '(7 8 info "Redundant bracket -Found: - (putStrLn \"hello world\") -Perhaps: - putStrLn \"hello world\"" :checker haskell-hlint)))) - -(flycheck-ert-def-checker-test - haskell-stack-ghc haskell nonstandard-stack-yaml-file - (skip-unless (file-exists-p (getenv "HOME"))) - - (let* ((flycheck-disabled-checkers '(haskell-ghc)) - (proj-dir "language/haskell/stack-project-with-renamed-stack-yaml") - (flycheck-ghc-stack-project-file - (expand-file-name "stack-nonstandard.yaml" - (flycheck-ert-resource-filename proj-dir)))) - - (flycheck-ert-should-syntax-check - (concat proj-dir "/src/Foo.hs") - 'haskell-mode))) - -(flycheck-ert-def-checker-test haskell-ghc haskell syntax-error - (let ((flycheck-disabled-checkers '(haskell-stack-ghc))) - (flycheck-ert-should-syntax-check - "language/haskell/SyntaxError.hs" 'haskell-mode - '(3 1 error "parse error on input `module'" :checker haskell-ghc)))) - -(flycheck-ert-def-checker-test haskell-ghc haskell type-error - (let ((flycheck-disabled-checkers '(haskell-stack-ghc))) - (flycheck-ert-should-syntax-check - "language/haskell/Error.hs" 'haskell-mode - '(4 16 error "* Couldn't match type `Bool' with `[Char]' - Expected type: String - Actual type: Bool -* In the first argument of `putStrLn', namely `True' - In the expression: putStrLn True - In an equation for `foo': foo = putStrLn True" :checker haskell-ghc)))) - -(flycheck-ert-def-checker-test (haskell-ghc haskell-hlint) haskell literate - (let ((flycheck-disabled-checkers '(haskell-stack-ghc))) - (flycheck-ert-should-syntax-check - "language/haskell/Literate.lhs" 'haskell-literate-mode - '(6 1 warning "Top-level binding with no type signature: foo :: a" - :id "-Wmissing-signatures" - :checker haskell-ghc)))) - -(flycheck-ert-def-checker-test (haskell-ghc haskell-hlint) haskell - complete-chain - (let ((flycheck-disabled-checkers '(haskell-stack-ghc))) - (flycheck-ert-should-syntax-check - "language/haskell/Warnings.hs" 'haskell-mode - '(4 1 warning "Eta reduce -Found: - spam eggs = map lines eggs -Perhaps: - spam = map lines" :checker haskell-hlint) - '(4 1 warning "Top-level binding with no type signature: - spam :: [String] -> [[String]]" - :id "-Wmissing-signatures" - :checker haskell-ghc) - '(7 8 info "Redundant bracket -Found: - (putStrLn \"hello world\") -Perhaps: - putStrLn \"hello world\"" :checker haskell-hlint)))) - -(flycheck-ert-def-checker-test html-tidy html nil - (flycheck-ert-should-syntax-check - "language/html.html" '(html-mode) - '(3 1 warning "missing declaration" - :checker html-tidy) - '(8 5 error " is not recognized!" - :checker html-tidy) - '(8 5 warning "discarding unexpected " - :checker html-tidy))) - - -(defconst flycheck-test-javascript-modes '(js-mode - js2-mode - js3-mode - js2-jsx-mode - rjsx-mode)) - -(when (version<= "25" emacs-version) - (add-to-list 'flycheck-test-javascript-modes 'js-jsx-mode)) - -(flycheck-ert-def-checker-test javascript-jshint javascript syntax-error - :tags '(checkstyle-xml) - ;; Silence JS2 and JS3 parsers - (let ((js2-mode-show-parse-errors nil) - (js2-mode-show-strict-warnings nil) - (js3-mode-show-parse-errors nil) - (inhibit-message t) - (flycheck-disabled-checkers - '(javascript-eslint javascript-gjslint))) - (flycheck-ert-should-syntax-check - "language/javascript/syntax-error.js" '(js-mode js2-mode js3-mode rjsx-mode) - '(3 1 error "Unrecoverable syntax error. (75% scanned)." - :checker javascript-jshint :id "E041") - '(3 25 error "Expected an identifier and instead saw ')'." - :checker javascript-jshint :id "E030")))) - -(flycheck-ert-def-checker-test javascript-jshint javascript nil - :tags '(checkstyle-xml) - (let ((flycheck-jshintrc "jshintrc") - (inhibit-message t) - (flycheck-disabled-checkers - '(javascript-eslint javascript-gjslint))) - (flycheck-ert-should-syntax-check - "language/javascript/warnings.js" '(js-mode js2-mode js3-mode rjsx-mode) - '(4 9 warning "'foo' is defined but never used." :id "W098" - :checker javascript-jshint)))) - -(flycheck-ert-def-checker-test javascript-eslint javascript error - (let ((flycheck-disabled-checkers '(javascript-jshint)) - (inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/javascript/syntax-error.js" flycheck-test-javascript-modes - '(3 25 error "Parsing error: Unexpected token )" :checker javascript-eslint)))) - -(flycheck-ert-def-checker-test javascript-eslint javascript warning - (let ((flycheck-disabled-checkers '(javascript-jshint)) - (inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/javascript/warnings.js" flycheck-test-javascript-modes - '(3 2 warning "Use the function form of 'use strict'." :id "strict" - :checker javascript-eslint - :end-line 5 :end-column 2) - '(4 9 warning "'foo' is assigned a value but never used." - :id "no-unused-vars" :checker javascript-eslint - :end-line 4 :end-column 12)))) - -(flycheck-ert-def-checker-test javascript-standard javascript error - (let ((flycheck-checker 'javascript-standard) - (inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/javascript/style.js" flycheck-test-javascript-modes - '(3 10 error "Missing space before function parentheses." - :checker javascript-standard) - '(4 1 error "Unexpected tab character." - :checker javascript-standard) - '(4 1 error "Expected indentation of 2 spaces but found 1 tab." - :checker javascript-standard) - '(4 2 error "Unexpected var, use let or const instead." - :checker javascript-standard) - '(4 6 error "'foo' is assigned a value but never used." - :checker javascript-standard) - '(4 13 error "Strings must use singlequote." - :checker javascript-standard) - '(4 27 error "Extra semicolon." - :checker javascript-standard) - '(5 5 error "Extra semicolon." - :checker javascript-standard)))) - -(flycheck-ert-def-checker-test javascript-standard javascript semistandard - (let ((flycheck-checker 'javascript-standard) - (flycheck-javascript-standard-executable "semistandard") - (inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/javascript/style.js" flycheck-test-javascript-modes - '(3 10 error "Missing space before function parentheses." - :checker javascript-standard) - '(4 1 error "Unexpected tab character." - :checker javascript-standard) - '(4 1 error "Expected indentation of 2 spaces but found 1 tab." - :checker javascript-standard) - '(4 2 error "Unexpected var, use let or const instead." - :checker javascript-standard) - '(4 6 error "'foo' is assigned a value but never used." - :checker javascript-standard) - '(4 13 error "Strings must use singlequote." - :checker javascript-standard)))) - -(flycheck-ert-def-checker-test json-jsonlint json nil - (flycheck-ert-should-syntax-check - "language/json.json" 'json-mode - '(1 44 error "found: ',' - expected: 'EOF'." :checker json-jsonlint))) - -(flycheck-ert-def-checker-test json-python-json json nil - (let ((flycheck-disabled-checkers '(json-jsonlint))) - (flycheck-ert-should-syntax-check - "language/json.json" 'json-mode - '(1 44 error "Extra data" :checker json-python-json)))) - -(flycheck-ert-def-checker-test json-jq json nil - (let ((flycheck-disabled-checkers '(json-jsonlint json-python-json))) - (flycheck-ert-should-syntax-check - "language/json.json" 'json-mode - '(1 44 error "Expected value before ','" :checker json-jq)))) - -(flycheck-ert-def-checker-test less less file-error - (let* ((candidates (list "no-such-file.less" - "npm://no-such-file.less" - "no-such-file.less")) - (message (string-join candidates ","))) - (flycheck-ert-should-syntax-check - "language/less/file-error.less" 'less-css-mode - `(3 1 error ,(concat "'no-such-file.less' wasn't found. Tried - " - message) - :checker less)))) - -(flycheck-ert-def-checker-test less less syntax-error - (flycheck-ert-should-syntax-check - "language/less/syntax-error.less" 'less-css-mode - '(1 1 error "Unrecognised input" :checker less))) - -(flycheck-ert-def-checker-test llvm-llc llvm nil - (flycheck-ert-should-syntax-check - "language/llvm.ll" 'llvm-mode - '(4 19 error "'%tmp' defined with type 'i32'" :checker llvm-llc))) - -(flycheck-ert-def-checker-test lua-luacheck lua syntax-error - (flycheck-ert-should-syntax-check - "language/lua/syntax-error.lua" 'lua-mode - '(5 7 error "unfinished string" :id "E011" :checker lua-luacheck))) - -(flycheck-ert-def-checker-test lua-luacheck lua warnings - (flycheck-ert-should-syntax-check - "language/lua/warnings.lua" 'lua-mode - '(1 1 warning "setting non-standard global variable 'global_var'" - :id "W111" :checker lua-luacheck) - '(3 16 warning "unused function 'test'" - :id "W211" :checker lua-luacheck) - '(3 21 warning "unused argument 'arg'" - :id "W212" :checker lua-luacheck) - '(4 11 warning "variable 'var2' is never set" - :id "W221" :checker lua-luacheck))) - -(flycheck-ert-def-checker-test lua-luacheck lua custom-luacheckrc - (let ((flycheck-luacheckrc "custom.luacheckrc")) - (flycheck-ert-should-syntax-check - "language/lua/warnings.lua" 'lua-mode - '(1 1 warning "setting non-standard global variable 'global_var'" - :id "W111" :checker lua-luacheck) - '(3 16 warning "unused function 'test'" - :id "W211" :checker lua-luacheck) - '(4 11 warning "variable 'var2' is never set" - :id "W221" :checker lua-luacheck)))) - -(flycheck-ert-def-checker-test lua-luacheck lua custom-standards - (let ((flycheck-luacheck-standards '("ngx_lua"))) - (flycheck-ert-should-syntax-check - "language/lua/ngx_lua.warnings.lua" 'lua-mode - '(3 16 warning "unused function 'test'" - :id "W211" :checker lua-luacheck) - '(3 21 warning "unused argument 'arg'" - :id "W212" :checker lua-luacheck) - '(4 11 warning "variable 'var2' is never set" - :id "W221" :checker lua-luacheck)))) - -(flycheck-ert-def-checker-test lua lua nil - (let ((flycheck-disabled-checkers '(lua-luacheck))) - (flycheck-ert-should-syntax-check - "language/lua/syntax-error.lua" 'lua-mode - '(5 nil error "unfinished string near '\"oh no'" - :checker lua)))) - -(flycheck-ert-def-checker-test opam opam nil - (flycheck-ert-should-syntax-check - "language/opam.opam" 'tuareg-opam-mode - '(0 nil error "Missing field 'maintainer'" - :id "23" :checker opam) - '(0 nil warning "Missing field 'authors'" - :id "25" :checker opam) - '(0 nil warning "Missing field 'homepage'" - :id "35" :checker opam) - '(0 nil warning "Missing field 'bug-reports'" - :id "36" :checker opam) - '(2 1 error "Invalid field maintainers" - :id "3" :checker opam))) - -(flycheck-ert-def-checker-test (perl perl-perlcritic) perl nil - (flycheck-ert-should-syntax-check - "language/perl.pl" '(perl-mode cperl-mode) - '(6 nil error "Global symbol \"$x\" requires explicit package name (did you forget to declare \"my $x\"?)" - :checker perl) - '(6 nil error "BEGIN not safe after errors--compilation aborted" - :checker perl) - '(6 6 error "Glob written as <...> (See page 167 of PBP)" - :id "BuiltinFunctions::RequireGlobFunction" :checker perl-perlcritic))) - -(flycheck-ert-def-checker-test perl perl modules - ;; Files that require unlisted modules should fail to check - (flycheck-ert-should-syntax-check - "language/perl/Script.pl" '(perl-mode cperl-mode) - '(3 nil error "Global symbol \"$dependency_a\" requires explicit package name (did you forget to declare \"my $dependency_a\"?)" - :checker perl) - '(4 nil error "Global symbol \"$dependency_b\" requires explicit package name (did you forget to declare \"my $dependency_b\"?)" - :checker perl)) - ;; Including those modules should allow them to check - (let ((flycheck-perl-include-path '(".")) - (flycheck-perl-module-list '("DependencyA"))) - (flycheck-ert-should-syntax-check - "language/perl/Script.pl" '(perl-mode cperl-mode) - '(4 nil error "Global symbol \"$dependency_b\" requires explicit package name (did you forget to declare \"my $dependency_b\"?)" - :checker perl))) - ;; ;; Multiple modules should be allowed - (let ((flycheck-perl-include-path '(".")) - (flycheck-perl-module-list '("DependencyA" "DependencyB"))) - (flycheck-ert-should-syntax-check - "language/perl/Script.pl" '(perl-mode cperl-mode)))) - -(flycheck-ert-def-checker-test php php syntax-error - (when (version<= emacs-version "25") - (ert-skip "PHP mode (via CC mode) seems broken on 24.5.")) - (flycheck-ert-should-syntax-check - "language/php/syntax-error.php" 'php-mode - '(8 nil error "Assignments can only happen to writable values" :checker php))) - -(flycheck-ert-def-checker-test (php php-phpcs php-phpmd) php nil - :tags '(phpmd-xml checkstyle-xml) - (flycheck-ert-should-syntax-check - "language/php/warnings.php" 'php-mode - '(1 1 error "Missing file doc comment" - :id "PEAR.Commenting.FileComment.Missing" :checker php-phpcs) - '(21 nil warning "Avoid unused private fields such as '$FOO'." - :id "UnusedPrivateField" :checker php-phpmd) - '(21 20 error "Private member variable \"FOO\" must be prefixed with an underscore" - :id "PEAR.NamingConventions.ValidVariableName.PrivateNoUnderscore" - :checker php-phpcs) - '(23 5 error "The open comment tag must be the only content on the line" - :id "Generic.Commenting.DocComment.ContentAfterOpen" - :checker php-phpcs) - '(23 5 error "Doc comment for parameter \"$baz\" missing" - :id "PEAR.Commenting.FunctionComment.MissingParamTag" - :checker php-phpcs) - '(23 9 error "Doc comment short description must be on the first line" - :id "Generic.Commenting.DocComment.SpacingBeforeShort" - :checker php-phpcs) - '(23 29 error "The close comment tag must be the only content on the line" - :id "Generic.Commenting.DocComment.ContentBeforeClose" - :checker php-phpcs) - '(23 29 error "Missing @return tag in function comment" - :id "PEAR.Commenting.FunctionComment.MissingReturn" - :checker php-phpcs) - '(24 nil warning "Avoid unused private methods such as 'bar'." - :id "UnusedPrivateMethod" :checker php-phpmd) - '(24 nil warning "Avoid unused parameters such as '$baz'." - :id "UnusedFormalParameter" :checker php-phpmd) - '(24 13 error "Private method name \"A::bar\" must be prefixed with an underscore" - :id "PEAR.NamingConventions.ValidFunctionName.PrivateNoUnderscore" - :checker php-phpcs) - '(26 nil warning "Avoid variables with short names like $i. Configured minimum length is 3." - :id "ShortVariable" :checker php-phpmd) - '(26 nil warning "Avoid unused local variables such as '$i'." - :id "UnusedLocalVariable" :checker php-phpmd) - '(26 12 error "TRUE, FALSE and NULL must be lowercase; expected \"false\" but found \"FALSE\"" - :id "Generic.PHP.LowerCaseConstant.Found" :checker php-phpcs))) - -(flycheck-ert-def-checker-test proselint (text markdown) nil - ;; Unset LC_ALL which is set to LC_ALL=C for other checkers in ./run.el, - ;; because Click, used by ProseLint, when running with python 3 will refuse to - ;; work unless an Unicode locale is exported. See: - ;; http://click.pocoo.org/5/python3/#python-3-surrogate-handling - (let ((flycheck-disabled-checkers '(markdown-markdownlint-cli markdown-mdl))) - (flycheck-ert-with-env '(("LC_ALL" . nil)) - (flycheck-ert-should-syntax-check - "language/text/text.txt" '(text-mode markdown-mode) - '(1 7 warning "Substitute 'damn' every time you're inclined to write 'very'; your editor will delete it and the writing will be just as it should be." - :id "weasel_words.very" - :checker proselint - :end-line 1 - :end-column 12) - '(2 4 warning "Redundancy. Use 'associate' instead of 'associate together'." - :id "redundancy.garner" - :checker proselint - :end-line 3 - :end-column 1) - '(3 5 warning "Gender bias. Use 'lawyer' instead of 'lady lawyer'." - :id "sexism.misc" - :checker proselint - :end-line 3 - :end-column 17))))) - -(flycheck-ert-def-checker-test processing processing syntax-error - (flycheck-ert-should-syntax-check - "language/processing/syntax_error/syntax_error.pde" 'processing-mode - '(4 2 error "Syntax error, maybe a missing semicolon?" - :checker processing))) - -(flycheck-ert-def-checker-test protobuf-protoc protobuf syntax-error - (flycheck-ert-should-syntax-check - "language/protobuf/protobuf/syntax-error.proto" 'protobuf-mode - '(2 23 error "Missing field number." - :checker protobuf-protoc))) - -(flycheck-ert-def-checker-test protobuf-prototool protobuf warnings - (flycheck-ert-should-syntax-check - "language/protobuf/prototool/missing_syntax.proto" 'protobuf-mode - '(1 1 warning "No syntax specified. Please use 'syntax = \"proto2\";' or 'syntax = \"proto3\";' to specify a syntax version." - :checker protobuf-prototool) - '(4 3 warning "Expected \"required\", \"optional\", or \"repeated\"." - :checker protobuf-prototool))) - -(flycheck-ert-def-checker-test pug pug syntax-error - (flycheck-ert-should-syntax-check - "language/pug/pug.pug" 'pug-mode - '(2 1 error "unexpected token \"indent\"" :checker pug))) - -(flycheck-ert-def-checker-test pug pug non-block-or-mixin-at-top-level-of-extended-template-error - (flycheck-ert-should-syntax-check - "language/pug/foo.pug" 'pug-mode - '(9 1 - error "Only named blocks and mixins can appear at the top level of an extending template" - :checker pug))) -(flycheck-ert-def-checker-test pug pug unknown-filter - (flycheck-ert-should-syntax-check - "language/pug/foo-unknown-filter.pug" 'pug-mode - '(1 1 - error "unknown filter \":myfilter\"" - :checker pug))) - -(flycheck-ert-def-checker-test pug pug include-extends-error - (flycheck-ert-should-syntax-check - "language/pug/pug-extends.pug" 'pug-mode - '(1 nil error "the \"basedir\" option is required to use includes and extends with \"absolute\" paths" - :checker pug))) - -(flycheck-ert-def-checker-test pug pug type-error - (flycheck-ert-should-syntax-check - "language/pug/pug-runtime-error.pug" 'pug-mode - '(5 nil error "Cannot read property 'bar' of undefined" :checker pug))) - -;; N.B. the puppet 4 and 3 tests are mutually exclusive -;; due to one having column and the other not -(flycheck-ert-def-checker-test puppet-parser puppet parser-error-puppet-4 - (skip-unless (version<= "4" (shell-command-to-string - "printf %s \"$(puppet --version)\""))) - (flycheck-ert-should-syntax-check - "language/puppet/parser-error.pp" 'puppet-mode - '(3 9 error "Syntax error at '>'" :checker puppet-parser))) - -(flycheck-ert-def-checker-test puppet-parser puppet parser-error-puppet-3 - (skip-unless (version<= (shell-command-to-string - "printf %s \"$(puppet --version)\"") "4")) - (flycheck-ert-should-syntax-check - "language/puppet/puppet3-parser-error.pp" 'puppet-mode - '(4 3 error "Syntax error at 'helloagain'" - :checker puppet-parser)) - (flycheck-ert-should-syntax-check - "language/puppet/puppet3-parser-multiline-error.pp" 'puppet-mode - '(4 25 error "Unclosed quote after \"'\" followed by '\\n}\\n...'" - :checker puppet-parser))) - -(flycheck-ert-def-checker-test puppet-lint puppet nil - (flycheck-ert-should-syntax-check - "language/puppet/warnings.pp" 'puppet-mode - '(2 nil error "foo::bar not in autoload module layout (autoloader_layout)" - :checker puppet-lint) - '(3 nil warning "case statement without a default case (case_without_default)" - :checker puppet-lint))) - -(flycheck-ert-def-checker-test python-flake8 python syntax-error - (let ((python-indent-guess-indent-offset nil) ; Silence Python Mode! - (flycheck-python-flake8-executable "python3")) - (flycheck-ert-should-syntax-check - "language/python/syntax-error.py" 'python-mode - '(3 7 error "SyntaxError: invalid syntax" :id "E999" - :checker python-flake8)))) - -(flycheck-ert-def-checker-test python-flake8 python nil - (let ((flycheck-python-flake8-executable "python3")) - (flycheck-ert-should-syntax-check - "language/python/test.py" 'python-mode - '(5 1 warning "'sys.antigravit' imported but unused" :id "F401" - :checker python-flake8) - '(7 1 warning "expected 2 blank lines, found 1" :id "E302" - :checker python-flake8) - '(12 29 warning "unexpected spaces around keyword / parameter equals" - :id "E251" :checker python-flake8) - '(12 31 warning "unexpected spaces around keyword / parameter equals" - :id "E251" :checker python-flake8) - '(22 1 error "undefined name 'antigravity'" :id "F821" - :checker python-flake8)))) - -(flycheck-ert-def-checker-test python-pyright python nil - (let ((flycheck-disabled-checkers '(python-mypy)) - (flycheck-checkers '(python-pyright))) - (flycheck-ert-should-syntax-check - "language/python/invalid_type.py" 'python-mode - '(2 12 error "Expression of type \"str\" cannot be assigned to return type \"int\"\n  \"str\" is incompatible with \"int\"" - :checker python-pyright - :end-line 2 - :end-column 13)))) - -(flycheck-ert-def-checker-test python-mypy python nil - (let ((flycheck-disabled-checkers '(python-flake8)) - (flycheck-checkers '(python-mypy)) - (flycheck-python-mypy-cache-dir null-device)) - (flycheck-ert-should-syntax-check - "language/python/invalid_type.py" 'python-mode - '(2 12 error "Incompatible return value type (got \"str\", expected \"int\")" - :checker python-mypy)))) - -(flycheck-ert-def-checker-test python-pylint python nil - (let ((flycheck-disabled-checkers '(python-flake8 python-mypy)) - (flycheck-python-pylint-executable "python3")) - (flycheck-ert-should-syntax-check - "language/python/test.py" 'python-mode - '(1 1 info "Missing module docstring" :id "missing-module-docstring" :checker python-pylint) - '(5 1 error "No name 'antigravit' in module 'sys'" :id "no-name-in-module" - :checker python-pylint) - '(5 1 warning "Unused antigravit imported from sys" :id "unused-import" - :checker python-pylint) - '(7 1 info "Missing class docstring" :id "missing-class-docstring" :checker python-pylint) - '(7 1 warning "Class 'Spam' inherits from object, can be safely removed from bases in python3" - :id "useless-object-inheritance" :checker python-pylint) - '(9 5 info "Method name \"withEggs\" doesn't conform to snake_case naming style" - :id "invalid-name" :checker python-pylint) - '(9 5 info "Missing function or method docstring" :id "missing-function-docstring" :checker python-pylint) - '(9 5 warning "Method could be a function" :id "no-self-use" - :checker python-pylint) - '(12 5 info "Missing function or method docstring" :id "missing-function-docstring" :checker python-pylint) - '(12 5 warning "Either all return statements in a function should return an expression, or none of them should." - :id "inconsistent-return-statements" :checker python-pylint) - '(12 5 warning "Method could be a function" - :id "no-self-use" :checker python-pylint) - '(14 16 error "Module 'sys' has no 'python_version' member" :id "no-member" - :checker python-pylint) - '(22 1 error "Undefined variable 'antigravity'" :id "undefined-variable" - :checker python-pylint)))) - -(flycheck-ert-def-checker-test python-pylint python no-symbolic-id - (let ((flycheck-disabled-checkers '(python-flake8 python-mypy)) - (flycheck-pylint-use-symbolic-id nil) - (flycheck-python-pylint-executable "python3")) - (flycheck-ert-should-syntax-check - "language/python/test.py" 'python-mode - '(1 1 info "Missing module docstring" :id "C0114" :checker python-pylint) - '(5 1 error "No name 'antigravit' in module 'sys'" :id "E0611" - :checker python-pylint) - '(5 1 warning "Unused antigravit imported from sys" :id "W0611" - :checker python-pylint) - '(7 1 info "Missing class docstring" :id "C0115" :checker python-pylint) - '(7 1 warning "Class 'Spam' inherits from object, can be safely removed from bases in python3" - :id "R0205" :checker python-pylint) - '(9 5 info "Method name \"withEggs\" doesn't conform to snake_case naming style" - :id "C0103" :checker python-pylint) - '(9 5 info "Missing function or method docstring" :id "C0116" :checker python-pylint) - '(9 5 warning "Method could be a function" :id "R0201" - :checker python-pylint) - '(12 5 info "Missing function or method docstring" :id "C0116" :checker python-pylint) - '(12 5 warning "Either all return statements in a function should return an expression, or none of them should." - :id "R1710" :checker python-pylint) - '(12 5 warning "Method could be a function" - :id "R0201" :checker python-pylint) - '(14 16 error "Module 'sys' has no 'python_version' member" :id "E1101" - :checker python-pylint) - '(22 1 error "Undefined variable 'antigravity'" :id "E0602" - :checker python-pylint)))) - -(flycheck-ert-def-checker-test python-pylint python negative-columns - (let ((flycheck-disabled-checkers '(python-flake8 python-mypy)) - (python-indent-guess-indent-offset nil) ; Silence Python Mode - (flycheck-python-pylint-executable "python3")) - (flycheck-ert-should-syntax-check - "language/python/gh_1383.py" 'python-mode - '(2 1 warning "Unused import sys" - :id "unused-import" :checker python-pylint) - '(4 1 warning "String statement has no effect" - :id "pointless-string-statement" :checker python-pylint)))) - -(flycheck-ert-def-checker-test python-pycompile python python27 - (skip-unless (executable-find "python2")) - (let ((flycheck-disabled-checkers '(python-flake8 python-pylint python-mypy)) - (flycheck-python-pycompile-executable "python2") - (python-indent-guess-indent-offset nil)) - (flycheck-ert-should-syntax-check - "language/python/syntax-error.py" 'python-mode - `(3 nil error "invalid syntax" :checker python-pycompile)))) - -(flycheck-ert-def-checker-test python-pycompile python has-no-warnings - (let ((flycheck-disabled-checkers '(python-flake8 python-pylint python-mypy))) - (flycheck-ert-should-syntax-check - "language/python/test.py" 'python-mode))) - -(flycheck-ert-def-checker-test r-lintr r nil - ;; Disable caching in lintr tests to make sure that the file is re-checked - ;; every time - (skip-unless (flycheck-r-has-lintr (flycheck-checker-executable 'r-lintr))) - (let ((flycheck-lintr-caching nil)) - (flycheck-ert-should-syntax-check - "language/r.R" 'R-mode - '(1 28 info "Opening curly braces should never go on their own line and should always be followed by a new line." - :checker r-lintr) - '(1 56 info "Put spaces around all infix operators." :checker r-lintr) - '(4 6 warning "Do not use absolute paths." :checker r-lintr) - '(7 5 error "unexpected end of input" :checker r-lintr)))) - -(flycheck-ert-def-checker-test racket racket nil - (skip-unless (funcall (flycheck-checker-get 'racket 'predicate))) - (let ((inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/racket.rkt" 'racket-mode - '(4 3 error "read: expected a `)' to close `('" :checker racket)))) - -(flycheck-ert-def-checker-test rpm-rpmlint rpm nil - (let ((inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/rpm.spec" '(sh-mode rpm-spec-mode) - '(1 nil warning "no-cleaning-of-buildroot %clean" :checker rpm-rpmlint) - '(1 nil warning "no-cleaning-of-buildroot %install" :checker rpm-rpmlint) - '(1 nil warning "no-buildroot-tag" :checker rpm-rpmlint) - '(7 nil error "buildarch-instead-of-exclusivearch-tag x86_64" - :checker rpm-rpmlint) - '(22 nil warning "macro-in-%changelog %{_bindir}" :checker rpm-rpmlint)))) - -(flycheck-ert-def-checker-test tcl-nagelfar tcl nil - (flycheck-ert-should-syntax-check - "language/tcl/test.tcl" 'tcl-mode - '(7 nil warning "Expr without braces" - :checker tcl-nagelfar) - '(8 nil info "Suspicious variable name \"val_${val}\"" - :checker tcl-nagelfar) - '(9 nil info "Suspicious variable name \"val_${val}\"" - :checker tcl-nagelfar) - '(12 nil error "Wrong number of arguments \(4\) to \"set\"" - :checker tcl-nagelfar))) - -(flycheck-ert-def-checker-test terraform terraform nil - (flycheck-ert-should-syntax-check - "language/terraform/terraform/syntax-error.tf" 'terraform-mode - '(2 nil error "The \";\" character is not valid. Use newlines to separate arguments and blocks,\nand commas to separate items in collection values." - :checker terraform) - '(2 nil error "An argument definition must end with a newline." - :checker terraform))) - -(flycheck-ert-def-checker-test terraform-tflint terraform nil - (flycheck-ert-should-syntax-check - "language/terraform/tflint/error.tf" 'terraform-mode - '(2 12 warning "Module source \"git://hashicorp.com/consul.git\" is not pinned" - :id "terraform_module_pinned_source" :checker terraform-tflint - :end-line 2 :end-column 44) - '(7 19 error "\"t1.2xlarge\" is an invalid value as instance_type" - :id "aws_instance_invalid_type" :checker terraform-tflint - :end-line 7 :end-column 31))) - -(flycheck-ert-def-checker-test markdown-markdownlint-cli markdown nil - (flycheck-ert-should-syntax-check - "language/markdown.md" 'markdown-mode - '(1 nil error "First line in file should be a top level heading [Context: \"## Second Header First\"]" - :id "MD041/first-line-heading/first-line-h1" :checker markdown-markdownlint-cli) - '(3 nil error "Multiple consecutive blank lines [Expected: 1; Actual: 2]" - :id "MD012/no-multiple-blanks" :checker markdown-markdownlint-cli) - '(4 15 error "Trailing spaces [Expected: 0 or 2; Actual: 7]" - :id "MD009/no-trailing-spaces" :checker markdown-markdownlint-cli))) - -(flycheck-ert-def-checker-test markdown-mdl markdown nil - (let ((flycheck-disabled-checkers '(markdown-markdownlint-cli))) - (flycheck-ert-should-syntax-check - "language/markdown.md" 'markdown-mode - '(1 nil error "First header should be a top level header" - :id "MD002" :checker markdown-mdl) - '(3 nil error "Multiple consecutive blank lines" - :id "MD012" :checker markdown-mdl) - '(4 nil error "Trailing spaces" - :id "MD009" :checker markdown-mdl)))) - -(flycheck-ert-def-checker-test nix nix nil - (flycheck-ert-should-syntax-check - "language/nix/syntax-error.nix" 'nix-mode - '(3 1 error "syntax error, unexpected IN, expecting ';'," :checker nix))) - -(flycheck-ert-def-checker-test nix-linter nix nil - (flycheck-ert-should-syntax-check - "language/nix/warnings.nix" 'nix-mode - '(1 1 warning "LetInInheritRecset" :id "LetInInheritRecset" :checker nix-linter) - '(3 4 warning "Unneeded `rec` on set" :id "UnneededRec" :checker nix-linter))) - -(ert-deftest flycheck-locate-sphinx-source-directory/not-in-a-sphinx-project () - :tags '(language-rst) - (flycheck-ert-with-resource-buffer "language/rst/errors.rst" - (should-not (flycheck-locate-sphinx-source-directory)))) - -(ert-deftest flycheck-locate-sphinx-source-directory/in-a-sphinx-project () - :tags '(language-rst) - (flycheck-ert-with-resource-buffer "language/rst/sphinx/index.rst" - (should (string= (flycheck-locate-sphinx-source-directory) - (flycheck-ert-resource-filename "language/rst/sphinx/"))))) - -(flycheck-ert-def-checker-test rst rst nil - (flycheck-ert-should-syntax-check - "language/rst/errors.rst" 'rst-mode - '(8 nil warning "Title underline too short." :checker rst) - '(14 nil error "Unexpected section title." :checker rst) - '(16 nil error "Unknown target name: \"restructuredtext\"." :checker rst) - '(19 nil warning "Title underline too short." :checker rst) - '(21 nil error "Unknown target name: \"cool\"." :checker rst) - '(26 nil error "Unexpected section title." :checker rst))) - -(flycheck-ert-def-checker-test rst-sphinx rst nil - (flycheck-ert-should-syntax-check - "language/rst/sphinx/index.rst" 'rst-mode - '(2 nil warning "Title underline too short." :checker rst-sphinx) - '(9 nil warning "Unknown target name: \"cool\"." :checker rst-sphinx) - '(9 nil warning "'envvar' reference target not found: FOO" - :checker rst-sphinx))) - -(flycheck-ert-def-checker-test rst-sphinx rst not-outside-of-a-sphinx-project - (flycheck-ert-with-resource-buffer "language/rst/errors.rst" - (rst-mode) - (should-not (flycheck-may-use-checker 'rst-sphinx)))) - -(flycheck-ert-def-checker-test ruby-rubocop ruby syntax-error - (flycheck-ert-should-syntax-check - "language/ruby/syntax-error.rb" 'ruby-mode - '(5 7 error "unexpected token tCONSTANT (Using Ruby 2.4 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)" - :id "Lint/Syntax" - :checker ruby-rubocop) - '(5 24 error "unterminated string meets end of file (Using Ruby 2.4 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)" - :id "Lint/Syntax" - :checker ruby-rubocop))) - -(flycheck-ert-def-checker-test ruby-standard ruby syntax-error - (let ((flycheck-disabled-checkers '(ruby-rubocop))) - (flycheck-ert-should-syntax-check - "language/ruby/syntax-error.rb" 'ruby-mode - '(5 7 error "unexpected token tCONSTANT (Using Ruby 2.4 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)" - :id "Lint/Syntax" - :checker ruby-standard) - '(5 24 error "unterminated string meets end of file (Using Ruby 2.4 parser; configure using `TargetRubyVersion` parameter, under `AllCops`)" - :id "Lint/Syntax" - :checker ruby-standard)))) - -(flycheck-ert-def-checker-test ruby-rubylint ruby syntax-error - (ert-skip "Pending: https://github.com/YorickPeterse/ruby-lint/issues/202") - (let ((flycheck-disabled-checkers '(ruby-rubocop ruby-reek))) - (flycheck-ert-should-syntax-check - "language/ruby/syntax-error.rb" 'ruby-mode - '(5 7 error "unexpected token tCONSTANT" :checker ruby-rubylint)))) - -(flycheck-ert-def-checker-test ruby ruby syntax-error - (let ((flycheck-disabled-checkers '(ruby-rubocop ruby-reek ruby-rubylint))) - (flycheck-ert-should-syntax-check - "language/ruby/syntax-error.rb" 'ruby-mode - '(4 nil warning "assigned but unused variable - days" :checker ruby) - '(5 nil error "syntax error, unexpected constant, expecting end-of-input" - :checker ruby)))) - -(flycheck-ert-def-checker-test ruby-jruby ruby syntax-error - (let ((flycheck-disabled-checkers '(ruby-rubocop ruby-reek ruby-rubylint ruby))) - (flycheck-ert-should-syntax-check - "language/ruby/syntax-error.rb" 'ruby-mode - '(5 nil error "syntax error, unexpected tCONSTANT" :checker ruby-jruby)))) - -(flycheck-ert-def-checker-test (ruby-rubocop ruby-reek ruby-rubylint) ruby with-rubylint - (flycheck-ert-should-syntax-check - "language/ruby/warnings.rb" 'ruby-mode - '(1 1 info "Missing frozen string literal comment." - :id "[Correctable] Style/FrozenStringLiteralComment" :checker ruby-rubocop) - '(3 nil warning "Person assumes too much for instance variable '@name'" - :id "InstanceVariableAssumption" :checker ruby-reek) - '(3 1 info "Missing top-level class documentation comment." - :id "Style/Documentation" :checker ruby-rubocop) - '(5 5 warning "unused local variable arr" :checker ruby-rubylint) - '(5 5 warning "Useless assignment to variable - `arr`." - :id "Lint/UselessAssignment" :checker ruby-rubocop) - '(5 11 info "Use `%i` or `%I` for an array of symbols." - :id "[Correctable] Style/SymbolArray" :checker ruby-rubocop) - '(6 10 info "Prefer single-quoted strings when you don't need string interpolation or special symbols." - :id "[Correctable] Style/StringLiterals" :checker ruby-rubocop) - '(10 5 info "the use of then/do is not needed here" :checker ruby-rubylint) - '(10 5 info "Use a guard clause (`return unless true`) instead of wrapping the code inside a conditional expression." - :id "Style/GuardClause":checker ruby-rubocop) - '(10 5 info "Favor modifier `if` usage when having a single-line body. Another good alternative is the usage of control flow `&&`/`||`." - :id "[Correctable] Style/IfUnlessModifier" :checker ruby-rubocop) - '(10 8 warning "Literal `true` appeared as a condition." - :id "Lint/LiteralAsCondition" :checker ruby-rubocop) - '(10 13 info "Do not use `then` for multi-line `if`." - :id "[Correctable] Style/MultilineIfThen" :checker ruby-rubocop) - '(11 7 info "Redundant `return` detected." - :id "[Correctable] Style/RedundantReturn" :checker ruby-rubocop) - '(11 24 error "undefined instance variable @name" :checker ruby-rubylint) - '(16 1 error "wrong number of arguments for 'test' (expected 2..3 but got 0)" - :checker ruby-rubylint))) - -(flycheck-ert-def-checker-test ruby-reek ruby warnings - (let ((flycheck-disabled-checkers '(ruby-rubocop ruby-rubylint))) - (flycheck-ert-should-syntax-check - "language/ruby/warnings.rb" 'ruby-mode - '(3 nil warning "Person assumes too much for instance variable '@name'" - :id "InstanceVariableAssumption" :checker ruby-reek)))) - -(flycheck-ert-def-checker-test ruby ruby warnings - (let ((flycheck-disabled-checkers '(ruby-rubocop ruby-reek ruby-rubylint))) - (flycheck-ert-should-syntax-check - "language/ruby/warnings.rb" 'ruby-mode - '(5 nil warning "assigned but unused variable - arr" :checker ruby) - '(16 nil warning "possibly useless use of == in void context" - :checker ruby)))) - -(flycheck-ert-def-checker-test ruby-jruby ruby nil - (let ((flycheck-disabled-checkers '(ruby-rubocop ruby-reek ruby-rubylint ruby))) - (flycheck-ert-should-syntax-check - "language/ruby/warnings.rb" 'ruby-mode - '(16 nil warning "Useless use of == in void context." - :checker ruby-jruby)))) - -(defun flycheck-ert-cargo-clean (manifest-path) - "Call `cargo clean` on the manifest at MANIFEST-PATH. - -The manifest path is relative to -`flycheck-test-resources-directory'." - ;; `cargo` builds binaries when we call the checker, so we need to start from - ;; a clean directory each time we want to test. - (call-process "cargo" nil nil nil "clean" "--manifest-path" - (expand-file-name manifest-path - flycheck-test-resources-directory))) - -(flycheck-ert-def-checker-test rust-cargo rust warning - (let ((flycheck-disabled-checkers '(rust)) - (flycheck-rust-crate-type "bin") - (flycheck-rust-binary-name "flycheck-test")) - (flycheck-ert-cargo-clean "language/rust/flycheck-test/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/flycheck-test/src/warnings.rs" 'rust-mode - '(3 4 warning "function is never used: `main`" - :checker rust-cargo :id "dead_code" :group 1 - :end-line 3 :end-column 8) - '(3 4 info "`#[warn(dead_code)]` on by default" - :checker rust-cargo :id "dead_code" :group 1 - :end-line 3 :end-column 8) - '(4 9 warning "unused variable: `x`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 10) - '(4 9 info "if this is intentional, prefix it with an underscore: `_x`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 10)))) - -(flycheck-ert-def-checker-test rust-cargo rust default-target - (let ((flycheck-disabled-checkers '(rust)) - (flycheck-rust-crate-type nil) - (flycheck-rust-binary-name nil)) - (flycheck-ert-cargo-clean "language/rust/flycheck-test/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/flycheck-test/src/warnings.rs" 'rust-mode - '(3 4 warning "function is never used: `main`" - :checker rust-cargo :id "dead_code" :group 1 - :end-line 3 :end-column 8) - '(3 4 info "`#[warn(dead_code)]` on by default" - :checker rust-cargo :id "dead_code" :group 1 - :end-line 3 :end-column 8) - '(4 9 warning "unused variable: `x`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 10) - '(4 9 info "if this is intentional, prefix it with an underscore: `_x`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 10)))) - -(flycheck-ert-def-checker-test rust-cargo rust lib-main - (let ((flycheck-disabled-checkers '(rust)) - (flycheck-rust-crate-type "bin") - (flycheck-rust-binary-name "lib-main")) - (flycheck-ert-should-syntax-check - "language/rust/lib-main/src/main.rs" 'rust-mode - `(3 12 error "cannot find value `zorglub` in this scope (not found in this scope)" - :checker rust-cargo :id "E0425" - :filename ,(flycheck-ert-resource-filename "language/rust/lib-main/src/lib.rs") - :group 1 - :end-line 3 :end-column 19)))) - -(flycheck-ert-def-checker-test rust-cargo rust conventional-layout - (let ((flycheck-disabled-checkers '(rust))) - (let ((flycheck-rust-crate-type "lib")) - (flycheck-ert-cargo-clean "language/rust/cargo-targets/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/cargo-targets/src/lib.rs" 'rust-mode - '(3 4 warning "function is never used: `foo_lib`" - :checker rust-cargo :id "dead_code" :group 1 - :end-line 3 :end-column 11) - '(6 17 warning "unused variable: `foo_lib_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 6 :end-column 29) - '(6 17 info "`#[warn(unused_variables)]` on by default" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 6 :end-column 29) - '(6 17 info "if this is intentional, prefix it with an underscore: `_foo_lib_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 6 :end-column 29))) - - (let ((flycheck-rust-crate-type "lib")) - (flycheck-ert-cargo-clean "language/rust/cargo-targets/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/cargo-targets/src/a.rs" 'rust-mode - '(1 4 warning "function is never used: `foo_a`" - :checker rust-cargo :id "dead_code" :group 1 - :end-line 1 :end-column 9) - '(1 4 info "`#[warn(dead_code)]` on by default" - :checker rust-cargo :id "dead_code" :group 1 - :end-line 1 :end-column 9) - '(4 17 warning "unused variable: `foo_a_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 27) - '(4 17 info "if this is intentional, prefix it with an underscore: `_foo_a_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 27))) - - (let ((flycheck-rust-crate-type "bin") - (flycheck-rust-binary-name "cargo-targets")) - (flycheck-ert-cargo-clean "language/rust/cargo-targets/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/cargo-targets/src/main.rs" 'rust-mode - '(1 17 warning "unused variable: `foo_main`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 25) - '(1 17 info "`#[warn(unused_variables)]` on by default" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 25) - '(1 17 info "if this is intentional, prefix it with an underscore: `_foo_main`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 25) - '(4 17 warning "unused variable: `foo_main_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 30) - '(4 17 info "if this is intentional, prefix it with an underscore: `_foo_main_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 30))) - - (let ((flycheck-rust-crate-type "bin") - (flycheck-rust-binary-name "a")) - (flycheck-ert-cargo-clean "language/rust/cargo-targets/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/cargo-targets/src/bin/a.rs" 'rust-mode - '(1 17 warning "unused variable: `foo_bin_a`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 26) - '(1 17 info "`#[warn(unused_variables)]` on by default" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 26) - '(1 17 info "if this is intentional, prefix it with an underscore: `_foo_bin_a`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 26) - '(4 17 warning "unused variable: `foo_bin_a_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 31) - '(4 17 info "if this is intentional, prefix it with an underscore: `_foo_bin_a_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 31))) - - (let ((flycheck-rust-crate-type "bench") - (flycheck-rust-binary-name "a")) - (flycheck-ert-cargo-clean "language/rust/cargo-targets/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/cargo-targets/benches/a.rs" 'rust-mode - '(1 17 warning "unused variable: `foo_bench_a`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 28) - '(1 17 info "`#[warn(unused_variables)]` on by default" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 28) - '(1 17 info "if this is intentional, prefix it with an underscore: `_foo_bench_a`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 28) - '(4 17 warning "unused variable: `foo_bench_a_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 33) - '(4 17 info "if this is intentional, prefix it with an underscore: `_foo_bench_a_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 33))) - - (let ((flycheck-rust-crate-type "test") - (flycheck-rust-binary-name "a")) - (flycheck-ert-cargo-clean "language/rust/cargo-targets/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/cargo-targets/tests/a.rs" 'rust-mode - '(2 16 warning "unused variable: `foo_test_a_test`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 2 :end-column 31) - '(2 16 info "`#[warn(unused_variables)]` on by default" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 2 :end-column 31) - '(2 16 info "if this is intentional, prefix it with an underscore: `_foo_test_a_test`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 2 :end-column 31) - '(4 4 warning "function is never used: `foo_test_a`" - :checker rust-cargo :id "dead_code" :group 2 - :end-line 4 :end-column 14) - '(4 4 info "`#[warn(dead_code)]` on by default" - :checker rust-cargo :id "dead_code" :group 2 - :end-line 4 :end-column 14))) - - (let ((flycheck-rust-crate-type "example") - (flycheck-rust-binary-name "a")) - (flycheck-ert-cargo-clean "language/rust/cargo-targets/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/cargo-targets/examples/a.rs" 'rust-mode - '(1 17 warning "unused variable: `foo_ex_a`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 25) - '(1 17 info "`#[warn(unused_variables)]` on by default" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 25) - '(1 17 info "if this is intentional, prefix it with an underscore: `_foo_ex_a`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 1 :end-column 25) - '(4 17 warning "unused variable: `foo_ex_a_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 30) - '(4 17 info "if this is intentional, prefix it with an underscore: `_foo_ex_a_test`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 4 :end-column 30))))) - -(flycheck-ert-def-checker-test rust-cargo rust workspace-subcrate - (let ((flycheck-disabled-checkers '(rust)) - (flycheck-rust-crate-type "lib") - (flycheck-rust-check-tests t)) - (flycheck-ert-cargo-clean "language/rust/workspace/crate1/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/workspace/crate1/src/lib.rs" 'rust-mode - '(2 7 warning "unused variable: `a`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 2 :end-column 8) - '(2 7 info "`#[warn(unused_variables)]` on by default" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 2 :end-column 8) - '(2 7 info "if this is intentional, prefix it with an underscore: `_a`" - :checker rust-cargo :id "unused_variables" :group 1 - :end-line 2 :end-column 8)))) - -(flycheck-ert-def-checker-test rust-cargo rust dev-dependencies - (let ((flycheck-disabled-checkers '(rust)) - (flycheck-rust-crate-type "lib") - (flycheck-rust-check-tests t)) - (flycheck-ert-cargo-clean "language/rust/dev-deps/Cargo.toml") - (flycheck-ert-should-syntax-check - "language/rust/dev-deps/src/lib.rs" 'rust-mode - '(2 1 warning "unused `#[macro_use]` import" - :checker rust-cargo :id "unused_imports" :group 1 - :end-line 2 :end-column 13) - '(2 1 info "`#[warn(unused_imports)]` on by default" - :checker rust-cargo :id "unused_imports" :group 1 - :end-line 2 :end-column 13) - '(8 9 warning "unused variable: `foo`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 8 :end-column 12) - '(8 9 info "`#[warn(unused_variables)]` on by default" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 8 :end-column 12) - '(8 9 info "if this is intentional, prefix it with an underscore: `_foo`" - :checker rust-cargo :id "unused_variables" :group 2 - :end-line 8 :end-column 12)))) - -(flycheck-ert-def-checker-test rust rust syntax-error - (let ((flycheck-disabled-checkers '(rust-cargo))) - (flycheck-ert-should-syntax-check - "language/rust/flycheck-test/src/syntax-error.rs" 'rust-mode - '(4 5 error "cannot find value `bla` in this scope (not found in this scope)" - :checker rust :id "E0425" :group 1 :end-line 4 :end-column 8)))) - -(flycheck-ert-def-checker-test rust rust type-error - (let ((flycheck-disabled-checkers '(rust-cargo))) - (flycheck-ert-should-syntax-check - "language/rust/flycheck-test/src/multiline-error.rs" 'rust-mode - '(7 9 error "mismatched types (expected `u8`, found `i8`)" - :checker rust :id "E0308" :group 1 - :end-line 7 :end-column 10) - '(7 9 info "you can convert an `i8` to `u8` and panic if the converted value wouldn't fit: `i.try_into().unwrap()`" - :checker rust :id "E0308" :group 1 - :end-line 7 :end-column 10)))) - -(flycheck-ert-def-checker-test rust rust warning - (let ((flycheck-disabled-checkers '(rust-cargo))) - (flycheck-ert-should-syntax-check - "language/rust/flycheck-test/src/warnings.rs" 'rust-mode - '(4 9 warning "unused variable: `x`" - :checker rust :id "unused_variables" :group 1 - :end-line 4 :end-column 10) - '(4 9 info "`#[warn(unused_variables)]` on by default" - :checker rust :id "unused_variables" :group 1 - :end-line 4 :end-column 10) - '(4 9 info "if this is intentional, prefix it with an underscore: `_x`" - :checker rust :id "unused_variables" :group 1 - :end-line 4 :end-column 10)))) - -(flycheck-ert-def-checker-test rust rust note-and-help - (let ((flycheck-disabled-checkers '(rust-cargo))) - (flycheck-ert-should-syntax-check - "language/rust/flycheck-test/src/note-and-help.rs" 'rust-mode - '(10 9 info "move occurs because `_x` has type `NonPOD`, which does not implement the `Copy` trait" - :checker rust :id "E0382" :group 1 - :end-line 10 :end-column 11) - '(11 14 info "value moved here" - :checker rust :id "E0382" :group 1 - :end-line 11 :end-column 16) - '(12 14 error "use of moved value: `_x` (value used here after move)" - :checker rust :id "E0382" :group 1 - :end-line 12 :end-column 16)))) - -(flycheck-ert-def-checker-test rust rust crate-root-not-set - (let ((flycheck-disabled-checkers '(rust-cargo))) - (flycheck-ert-should-syntax-check - "language/rust/flycheck-test/src/importing.rs" 'rust-mode - '(1 5 error "failed to resolve: there are too many leading `super` keywords (there are too many leading `super` keywords)" - :checker rust :id "E0433" :group 2 - :end-line 1 :end-column 10) - '(4 24 error "failed to resolve: use of undeclared crate or module `imported` (use of undeclared crate or module `imported`)" - :checker rust :id "E0433" :group 3 - :end-line 4 :end-column 32)))) - -(flycheck-ert-def-checker-test rust rust macro-error - (let ((flycheck-disabled-checkers '(rust-cargo))) - (flycheck-ert-should-syntax-check - "language/rust/flycheck-test/src/macro-error.rs" 'rust-mode - '(2 13 error "1 positional argument in format string, but no arguments were given" - :checker rust :group 1 - :end-line 2 :end-column 15)))) - -(flycheck-ert-def-checker-test sass sass nil - (let ((flycheck-disabled-checkers '(sass/scss-sass-lint))) - (flycheck-ert-should-syntax-check - "language/sass/error.sass" 'sass-mode - '(5 nil error "Inconsistent indentation: 3 spaces were used for indentation, but the rest of the document was indented using 2 spaces." - :checker sass)))) - -(flycheck-ert-def-checker-test sass sass warning - (let ((flycheck-disabled-checkers '(sass/scss-sass-lint))) - (flycheck-ert-should-syntax-check - "language/sass/warning.sass" 'sass-mode - '(2 nil warning "this is deprecated" :checker sass)))) - -(flycheck-ert-def-checker-test scala scala nil - (flycheck-ert-should-syntax-check - "language/scala/syntax-error.scala" 'scala-mode - '(3 nil error "identifier expected but '{' found." :checker scala))) - -(flycheck-ert-def-checker-test scala-scalastyle scala error - (let ((flycheck-scalastylerc "scalastyle.xml")) - (flycheck-ert-should-syntax-check - "language/scala/style-error.scala" 'scala-mode - '(6 5 error "Don't use println" :checker scala-scalastyle)))) - -(flycheck-ert-def-checker-test scala-scalastyle scala warning - (let ((flycheck-scalastylerc "scalastyle.xml")) - (flycheck-ert-should-syntax-check - "language/scala/style-warning.scala" 'scala-mode - '(5 9 warning "Redundant braces after class definition" - :checker scala-scalastyle)))) - -(defvar geiser-impl--implementation) - -(defun flycheck/chicken-mode () - "Enable Scheme and Geiser mode for Chicken scheme." - (interactive) - (scheme-mode) - (setq-local geiser-impl--implementation 'chicken) - (geiser-mode)) - -(flycheck-ert-def-checker-test scheme-chicken scheme error-no-line-number - (skip-unless (version<= "25.1" emacs-version)) - (flycheck-ert-should-syntax-check - "language/chicken/error-no-line-number.scm" 'flycheck/chicken-mode - '(0 nil error "(cddr) during expansion of (for-each ...) - bad argument type: ()\n\n\tCall history:\n\n\t\t (##core#begin (for-each))\n\t\t (for-each)\t<--" - :checker scheme-chicken))) - -(flycheck-ert-def-checker-test scheme-chicken scheme syntax-error - (skip-unless (version<= "25.1" emacs-version)) - (flycheck-ert-should-syntax-check - "language/chicken/syntax-error.scm" 'flycheck/chicken-mode - '(1 nil error "not enough arguments\n\n\t(define)\n\n\tExpansion history:\n\n\t\t (##core#begin (define))\n\t\t (define)\t<--" - :checker scheme-chicken))) - -(flycheck-ert-def-checker-test scheme-chicken scheme syntax-error-no-line-number - (skip-unless (version<= "25.1" emacs-version)) - (flycheck-ert-should-syntax-check - "language/chicken/syntax-error-no-line-number.scm" 'flycheck/chicken-mode - '(0 nil error "illegal atomic form\n\n\t()\n\n\tExpansion history:\n\n\t\t (##core#begin ())\t<--" - :checker scheme-chicken))) - -(flycheck-ert-def-checker-test scheme-chicken scheme syntax-read-error - (skip-unless (version<= "25.1" emacs-version)) - (flycheck-ert-should-syntax-check - "language/chicken/syntax-read-error.scm" 'flycheck/chicken-mode - '(1 nil error "invalid sharp-sign read syntax: #\\n" - :checker scheme-chicken))) - -(flycheck-ert-def-checker-test scss-lint scss nil - (let ((flycheck-scss-lintrc "scss-lint.yml")) - (flycheck-ert-should-syntax-check - "language/scss/lint-error.scss" 'scss-mode - '(1 1 error "Avoid using id selectors" - :checker scss-lint :id "IdSelector") - '(3 16 warning "Color `red` should be written in hexadecimal form as `#ff0000`" - :checker scss-lint :id "ColorKeyword")))) - -(flycheck-ert-def-checker-test scss-lint scss syntax-error - (flycheck-ert-should-syntax-check - "language/scss/error.scss" 'scss-mode - '(3 1 error "Syntax Error: Invalid CSS after \"... c olor: red\": expected \"{\", was \";\"" - :checker scss-lint :id "Syntax"))) - -(flycheck-ert-def-checker-test scss scss nil - (let ((flycheck-disabled-checkers '(scss-lint scss-stylelint sass/scss-sass-lint))) - (flycheck-ert-should-syntax-check - "language/scss/error.scss" 'scss-mode - '(3 nil error "Invalid CSS after \"... c olor: red\": expected \"{\", was \";\"" - :checker scss)))) - -(flycheck-ert-def-checker-test scss scss warning - (let ((flycheck-disabled-checkers '(scss-lint scss-stylelint sass/scss-sass-lint))) - (flycheck-ert-should-syntax-check - "language/scss/warning.scss" 'scss-mode - '(2 nil warning ".container is deprecated" :checker scss)))) - -(flycheck-ert-def-checker-test sh-bash (sh sh-bash) nil - (let ((inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/sh/bash-syntax-error.bash" 'sh-mode - '(5 nil error "syntax error near unexpected token `fi'" :checker sh-bash) - '(5 nil error "`fi'" :checker sh-bash)))) - -(flycheck-ert-def-checker-test sh-posix-dash (sh sh-posix) nil - (let ((inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/sh/posix-syntax-error.sh" 'sh-mode - '(3 nil error "Syntax error: \"(\" unexpected" :checker sh-posix-dash)))) - -(flycheck-ert-def-checker-test sh-posix-bash (sh sh-posix) nil - (let ((flycheck-disabled-checkers '(sh-posix-dash)) - (inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/sh/posix-syntax-error.sh" 'sh-mode - '(3 nil error "syntax error near unexpected token `('" - :checker sh-posix-bash) - '(3 nil error "`cat <(echo blah)'" :checker sh-posix-bash)))) - -(flycheck-ert-def-checker-test sh-zsh (sh sh-zsh) nil - (let ((inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/sh/zsh-syntax-error.zsh" 'sh-mode - '(5 nil error "parse error near `fi'" :checker sh-zsh)))) - -(flycheck-ert-def-checker-test sh-shellcheck sh nil - :tags '(checkstyle-xml) - (let ((inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/sh/shellcheck.sh" 'sh-mode - '(2 5 warning "Tilde does not expand in quotes. Use $HOME." - :checker sh-shellcheck :id "SC2088") - '(3 7 error "Double quote array expansions to avoid re-splitting elements." - :checker sh-shellcheck :id "SC2068") - '(4 8 warning "Declare and assign separately to avoid masking return values." - :checker sh-shellcheck :id "SC2155") - '(4 11 info "Use $(...) notation instead of legacy backticked `...`." - :checker sh-shellcheck :id "SC2006") - '(4 12 info "which is non-standard. Use builtin 'command -v' instead." - :checker sh-shellcheck :id "SC2230")))) - -(flycheck-ert-def-checker-test slim slim nil - (flycheck-ert-should-syntax-check - "language/slim.slim" 'slim-mode - `(2 1 error "Unexpected indentation" :checker slim))) - -(flycheck-ert-def-checker-test sqlint sql nil - (flycheck-ert-should-syntax-check - "language/sql.sql" 'sql-mode - `(1 15 error "unterminated quoted string at or near \"';\n \"" - :checker sql-sqlint))) - -(flycheck-ert-def-checker-test systemd-analyze systemd nil - (flycheck-ert-should-syntax-check - "language/systemd-analyze-test.service" 'systemd-mode - '(0 nil error "Service has no ExecStart=, ExecStop=, or SuccessAction=. Refusing." - :checker systemd-analyze) - '(3 nil error "Invalid URL, ignoring: foo://bar" - :checker systemd-analyze) - '(5 nil error "ListenStream= references a path below legacy directory /var/run/, updating /var/run/dbus/system_bus_socket → /run/dbus/system_bus_socket; please update the unit file accordingly." - :filename "/lib/systemd/system/dbus.socket" - :checker systemd-analyze) - '(6 nil error "Unknown key name 'ExecSmart' in section 'Service', ignoring." - :checker systemd-analyze) - '(8 nil error "Unknown section 'Dog'. Ignoring." - :checker systemd-analyze))) - -(flycheck-ert-def-checker-test tex-chktex (tex latex) nil - (flycheck-ert-should-syntax-check - "language/tex.tex" 'latex-mode - '(5 29 warning "Intersentence spacing (`\\@') should perhaps be used." - :id "13" :checker tex-chktex))) - -(flycheck-ert-def-checker-test tex-lacheck (tex latex) nil - (let ((flycheck-disabled-checkers '(tex-chktex))) - (flycheck-ert-should-syntax-check - "language/tex.tex" 'latex-mode - '(5 nil warning "missing `\\@' before `.' in \"GNU.\"" - :checker tex-lacheck) - '(7 nil warning "possible unwanted space at \"{\"" - :checker tex-lacheck)))) - -(flycheck-ert-def-checker-test texinfo texinfo nil - (flycheck-ert-should-syntax-check - "language/texinfo.texi" 'texinfo-mode - '(3 nil warning "@settitle missing argument" :checker texinfo) - '(7 nil error "unknown command `bold'" :checker texinfo) - '(7 nil error "misplaced {" :checker texinfo) - '(7 nil error "misplaced }" :checker texinfo) - '(9 nil warning "printindex before document beginning: @printindex cp" - :checker texinfo))) - -(flycheck-ert-def-checker-test textlint (text markdown) nil - (let ((flycheck-disabled-checkers '(proselint markdown-markdownlint-cli markdown-mdl)) - (flycheck-textlint-config "language/text/textlintrc.json")) - (flycheck-ert-should-syntax-check - "language/text/text.txt" '(text-mode markdown-mode) - '(1 7 error "\"very\" is a weasel word and can weaken meaning" - :id "write-good" :checker textlint)))) - -(flycheck-ert-def-checker-test typescript-tslint typescript nil - (let ((flycheck-disabled-checkers '(javascript-eslint))) - (flycheck-ert-should-syntax-check - "language/typescript/sample.ts" 'typescript-mode - '(2 23 warning "Module 'chai' is not listed as dependency in package.json" - :checker typescript-tslint :id "no-implicit-dependencies" - :end-line 2 :end-column 29) - '(5 3 warning "Forbidden 'var' keyword, use 'let' or 'const' instead" - :checker typescript-tslint :id "no-var-keyword" - :end-line 5 :end-column 6) - '(6 15 warning "Missing semicolon" - :checker typescript-tslint :id "semicolon" - :end-line 6 :end-column 15)))) - -(flycheck-ert-def-checker-test verilog-verilator verilog error - (flycheck-ert-should-syntax-check - "language/verilog/verilator_error.v" 'verilog-mode - '(4 nil error "Unsupported: $fopen with multichannel descriptor. Add ,\"w\" as second argument to open a file descriptor." - :checker verilog-verilator))) - -(flycheck-ert-def-checker-test verilog-verilator verilog warning - (flycheck-ert-should-syntax-check - "language/verilog/verilator_warning.v" 'verilog-mode - '(2 nil warning "Signal is not driven, nor used: 'val'" - :checker verilog-verilator))) - -(flycheck-ert-def-checker-test vhdl-ghdl vhdl error - (flycheck-ert-should-syntax-check - "language/vhdl.vhd" 'vhdl-mode - '(4 1 error "';' is expected instead of ''" - :checker vhdl-ghdl))) - -(flycheck-ert-def-checker-test xml-xmlstarlet xml nil - (let ((inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/xml.xml" 'nxml-mode - '(4 10 error "Opening and ending tag mismatch: spam line 3 and with" - :checker xml-xmlstarlet)))) - -(flycheck-ert-def-checker-test xml-xmllint xml nil - (let ((flycheck-disabled-checkers '(xml-xmlstarlet)) - (inhibit-message t)) - (flycheck-ert-should-syntax-check - "language/xml.xml" 'nxml-mode - '(4 nil error "parser error : Opening and ending tag mismatch: spam line 3 and with" - :checker xml-xmllint) - '(5 nil error "parser error : Extra content at the end of the document" - :checker xml-xmllint)))) - -(flycheck-ert-def-checker-test yaml-jsyaml yaml nil - (flycheck-ert-should-syntax-check - "language/yaml.yaml" 'yaml-mode - '(4 5 error "bad indentation of a mapping entry" - :checker yaml-jsyaml))) - -(flycheck-ert-def-checker-test yaml-ruby yaml nil - (let ((flycheck-disabled-checkers '(yaml-jsyaml))) - (flycheck-ert-should-syntax-check - "language/yaml.yaml" 'yaml-mode - '(4 5 error "mapping values are not allowed in this context" - :checker yaml-ruby)))) - -(flycheck-ert-def-checker-test yaml-yamllint yaml nil - (let ((flycheck-disabled-checkers '(yaml-yamlyaml))) - (flycheck-ert-should-syntax-check - "language/yaml.yaml" 'yaml-mode - '(3 1 warning "missing document start "---" (document-start)" - :checker yaml-yamllint)) - (flycheck-ert-should-syntax-check - "language/yaml.yaml" 'yaml-mode - '(4 5 error "syntax error: mapping values are not allowed here" - :checker yaml-yamllint)))) - -(flycheck-ert-def-checker-test jsonnet jsonnet nil - (flycheck-ert-should-syntax-check - "language/jsonnet/static_error.jsonnet" 'jsonnet-mode - '(1 23 "Not a unary operator: =" :checker jsonnet))) - -(flycheck-ert-def-checker-test jsonnet jsonnet nil - (flycheck-ert-should-syntax-check - "language/jsonnet/runtime_error.jsonnet" 'jsonnet-mode - '(2 6 "Field does not exist: flat" :checker jsonnet - :end-line 2 :end-column 14))) - -(flycheck-ert-initialize flycheck-test-resources-directory) - -(provide 'flycheck-test) - -;; Local Variables: -;; coding: utf-8 -;; indent-tabs-mode: nil -;; End: - -;;; flycheck-test.el ends here diff --git a/emacs.d/vendor/flycheck/test/init.el b/emacs.d/vendor/flycheck/test/init.el deleted file mode 100644 index 1ac60e3..0000000 --- a/emacs.d/vendor/flycheck/test/init.el +++ /dev/null @@ -1,152 +0,0 @@ -;;; init.el --- Flycheck: Init file for testing -*- lexical-binding: t; -*- - -;; Copyright (C) 2017 Flycheck contributors -;; Copyright (C) 2015-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner -;; Maintainer: Clément Pit-Claudel -;; fmdkdd -;; URL: https://www.flycheck.org - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Use with `emacs -Q -l test/init.el -f flycheck/init' to start a clean session -;; with only Flycheck present. -;; -;; Installs all dependencies of Flycheck to a temporary package directory, and -;; loads Flycheck. - -;;; Code: - -(require 'package) - -(defconst flycheck/init-file (if load-in-progress - load-file-name - buffer-file-name) - "The path of this file.") - -(defun flycheck/init () - "Initialize a minimal Flycheck session. - -Install Flycheck and its dependencies into a separate package -directory (init-elpa in the current directory) and enable -Flycheck globally. - -Set some global customization options to get rid of some of the -worst defaults of Emacs and create a half-way bearable Emacs -session. - -Define a `demo' checker which can be used to demonstrate Flycheck -in this file." - (setq load-prefer-newer t) ; Don't load outdated bytecode - - (setq package-user-dir (expand-file-name "init-elpa" (file-name-directory - flycheck/init-file)) - package-check-signature nil) - (add-to-list 'package-archives - '("MELPA" . "https://stable.melpa.org/packages/")) - - (package-initialize) - - (let* ((source-dir (locate-dominating-file flycheck/init-file "flycheck.el")) - (flycheck-el (expand-file-name "flycheck.el" source-dir))) - ;; Install Flycheck to bring its dependencies in - (unless (package-installed-p 'flycheck) - (package-refresh-contents) - (package-install-file flycheck-el)) - (load flycheck-el)) - - (require 'flycheck) - (global-flycheck-mode) - - ;; Some dummy code for warnings which we use to demonstrate Flycheck, see - ;; `demo' checker below. - (list 'an-info-here - 'a-warning-here - 'an-error-here) - - ;; Some little convenience, to this Emacs session at least half way bearable - (require 'ido) - (ido-mode t) - (setq ido-enable-flex-matching t) - - ;; Get rid of all the silly UI clutter of a default Emacs session and opt out - ;; of all the stupid startup and license messages - (tool-bar-mode -1) - (blink-cursor-mode -1) - (setq ring-bell-function #'ignore - inhibit-startup-screen t - initial-scratch-message "") - (fset 'yes-or-no-p #'y-or-n-p) - (fset 'display-startup-echo-area-message #'ignore) - - ;; Improve OS X key behaviour - (when (eq system-type 'darwin) - (setq mac-option-modifier 'meta ; Option is simply the natural Meta - mac-command-modifier 'meta ; But command is a lot easier to hit - mac-right-command-modifier 'left - mac-right-option-modifier 'none ; Keep right option for accented input - mac-function-modifier 'hyper)) - - (flycheck-define-generic-checker 'demo - "A demo syntax checker." - :start (lambda (checker callback) - (funcall callback 'finished - (save-excursion - (goto-char (point-min)) - (search-forward "an-info-here") - (list (flycheck-error-new-at - (line-number-at-pos) 10 'info - "An info here" :checker checker) - (flycheck-error-new-at - (+ 1 (line-number-at-pos)) 10 'warning - "A warning here" :checker checker) - (flycheck-error-new-at - (+ 2 (line-number-at-pos)) 10 'error - "A error here" :checker checker))))) - :modes 'emacs-lisp-mode)) - -(defun flycheck-prepare-screenshot (&optional hide-cursor) - "Prepare this Emacs session for a screenshot. - -If HIDE-CURSOR is non-nil or if a prefix arg is given hide the -cursor, otherwise keep it." - (interactive "P") - ;; Reduce UI and disable cursor - (menu-bar-mode -1) - (scroll-bar-mode -1) - (setq-default truncate-lines t) - (when hide-cursor - (setq-default cursor-type nil)) - - (set-frame-font "Source Code Pro-13") - (set-frame-size (selected-frame) 750 560 'pixelwise) - ;; Tuck the error list to the bottom side window at a fixed height - (add-to-list 'display-buffer-alist - `(,(rx bos "*Flycheck errors*") - (display-buffer-reuse-window - display-buffer-in-side-window) - (side . bottom) - (reusable-frames . visible) - (window-height . 0.33)))) - -;; Local Variables: -;; no-byte-compile: t -;; End: - -;;; init.el ends here diff --git a/emacs.d/vendor/flycheck/test/resources/automatic-check-dummy.el b/emacs.d/vendor/flycheck/test/resources/automatic-check-dummy.el deleted file mode 100644 index 49b60dd..0000000 --- a/emacs.d/vendor/flycheck/test/resources/automatic-check-dummy.el +++ /dev/null @@ -1 +0,0 @@ -A dummy file to test automatic syntax checking diff --git a/emacs.d/vendor/flycheck/test/resources/bin/dummy-emacs b/emacs.d/vendor/flycheck/test/resources/bin/dummy-emacs deleted file mode 100755 index 3b18f8f..0000000 --- a/emacs.d/vendor/flycheck/test/resources/bin/dummy-emacs +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8; -*- - -from __future__ import print_function - -import sys -import re - -filename = sys.argv[-1] - -print('{0}:17:4:Error: t is not true!'.format(filename)) -print('{0}:19:11:Warning: This is a stupid message'.format(filename)) -sys.exit(1) diff --git a/emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package-autoloads.el b/emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package-autoloads.el deleted file mode 100644 index 2353207..0000000 --- a/emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package-autoloads.el +++ /dev/null @@ -1,29 +0,0 @@ -;;; dummy-package-autoloads.el --- automatically extracted autoloads -;; -;;; Code: - - -;;;### (autoloads nil "dummy-package" "dummy-package.el" (20978 39905 -;;;;;; 0 0)) -;;; Generated autoloads from dummy-package.el - -(autoload 'dummy-package-foo "dummy-package" "\ - - -\(fn)" nil nil) - -;;;*** - -;;;### (autoloads nil nil ("dummy-package-pkg.el") (20978 39909 438930 -;;;;;; 0)) - -;;;*** - -(provide 'dummy-package-autoloads) -;; Local Variables: -;; version-control: never -;; no-byte-compile: t -;; no-update-autoloads: t -;; coding: utf-8 -;; End: -;;; dummy-package-autoloads.el ends here diff --git a/emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package-pkg.el b/emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package-pkg.el deleted file mode 100644 index e28a69d..0000000 --- a/emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package-pkg.el +++ /dev/null @@ -1 +0,0 @@ -(define-package "dummy-package" "0.1" "Dummy package" 'nil) diff --git a/emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package.el b/emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package.el deleted file mode 100644 index c04c42d..0000000 --- a/emacs.d/vendor/flycheck/test/resources/dummy-elpa/dummy-package-0.1/dummy-package.el +++ /dev/null @@ -1,5 +0,0 @@ -;;;###autoload -(defun dummy-package-foo () - (message "Hello world")) - -(provide 'dummy-package) diff --git a/emacs.d/vendor/flycheck/test/resources/global-mode-dummy.el b/emacs.d/vendor/flycheck/test/resources/global-mode-dummy.el deleted file mode 100644 index c2380f2..0000000 --- a/emacs.d/vendor/flycheck/test/resources/global-mode-dummy.el +++ /dev/null @@ -1 +0,0 @@ -A dummy file to test whether the global mode can be enabled or not diff --git a/emacs.d/vendor/flycheck/test/resources/language/ada/hello.adb b/emacs.d/vendor/flycheck/test/resources/language/ada/hello.adb deleted file mode 100644 index 32add68..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/ada/hello.adb +++ /dev/null @@ -1,11 +0,0 @@ -with Ada.Text_IO; -with Ada.Command_Line; - -procedure Hello is - package IO renames Ada.Text_IO; - Name : String := Ada.Command_Line.Argument (1); -begin - pragma Foo; - IO.Put_Line("Hello, world!"); - IO.New_Line; -end Hello; diff --git a/emacs.d/vendor/flycheck/test/resources/language/ada/syntaxerror.adb b/emacs.d/vendor/flycheck/test/resources/language/ada/syntaxerror.adb deleted file mode 100644 index d0bd00f..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/ada/syntaxerror.adb +++ /dev/null @@ -1,8 +0,0 @@ -with Ada.Text_IO; -with Ada.Command_Line; - -procedure SyntaxError is - package IO renames Ada.Text_IO; -begin - IO.Put_Line("Hello, world!") -end SyntaxErro; diff --git a/emacs.d/vendor/flycheck/test/resources/language/asciidoc.adoc b/emacs.d/vendor/flycheck/test/resources/language/asciidoc.adoc deleted file mode 100644 index 58f267a..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/asciidoc.adoc +++ /dev/null @@ -1,15 +0,0 @@ -[paragraph] -{empty} - -`---`--- -1 2 -3 4 -5 6 --------- - -[format="csv", width="%60%", cols="4"] -|====== -1,2,3,4 -a,b,c,d -A,B,C,D -|====== diff --git a/emacs.d/vendor/flycheck/test/resources/language/asciidoctor.adoc b/emacs.d/vendor/flycheck/test/resources/language/asciidoctor.adoc deleted file mode 100644 index a54a5f1..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/asciidoctor.adoc +++ /dev/null @@ -1,6 +0,0 @@ -= Document -:doctype: article - -=== P1 - -endif::[] \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/awk/syntax-error.awk b/emacs.d/vendor/flycheck/test/resources/language/awk/syntax-error.awk deleted file mode 100644 index 2c2a26e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/awk/syntax-error.awk +++ /dev/null @@ -1,2 +0,0 @@ - -x=| diff --git a/emacs.d/vendor/flycheck/test/resources/language/bazel/syntax-error.bazel b/emacs.d/vendor/flycheck/test/resources/language/bazel/syntax-error.bazel deleted file mode 100644 index 8df84ea..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/bazel/syntax-error.bazel +++ /dev/null @@ -1,3 +0,0 @@ -cc_binary!( - name = "hello-world", -) diff --git a/emacs.d/vendor/flycheck/test/resources/language/bazel/warnings.bazel b/emacs.d/vendor/flycheck/test/resources/language/bazel/warnings.bazel deleted file mode 100644 index 20c6f47..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/bazel/warnings.bazel +++ /dev/null @@ -1,4 +0,0 @@ -cc_binary( - name = "hello-world", - srcs = ["hello-world.cc"], -) diff --git a/emacs.d/vendor/flycheck/test/resources/language/c_c++/error.cpp b/emacs.d/vendor/flycheck/test/resources/language/c_c++/error.cpp deleted file mode 100644 index d825465..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/c_c++/error.cpp +++ /dev/null @@ -1,8 +0,0 @@ -template -void foo(T& x) { x.bar(); } - -struct A {}; - -void bar() { A a; foo(a); } - -#pragma nope diff --git a/emacs.d/vendor/flycheck/test/resources/language/c_c++/in-included-file.cpp b/emacs.d/vendor/flycheck/test/resources/language/c_c++/in-included-file.cpp deleted file mode 100644 index 93150ea..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/c_c++/in-included-file.cpp +++ /dev/null @@ -1,3 +0,0 @@ -class test {}; - -#include "warning.c" diff --git a/emacs.d/vendor/flycheck/test/resources/language/c_c++/include/library.h b/emacs.d/vendor/flycheck/test/resources/language/c_c++/include/library.h deleted file mode 100644 index 7d82cca..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/c_c++/include/library.h +++ /dev/null @@ -1 +0,0 @@ -#define FLYCHECK_LIBRARY diff --git a/emacs.d/vendor/flycheck/test/resources/language/c_c++/includes.c b/emacs.d/vendor/flycheck/test/resources/language/c_c++/includes.c deleted file mode 100644 index 34ba206..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/c_c++/includes.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "local.h" -#include diff --git a/emacs.d/vendor/flycheck/test/resources/language/c_c++/local.h b/emacs.d/vendor/flycheck/test/resources/language/c_c++/local.h deleted file mode 100644 index bb5eec4..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/c_c++/local.h +++ /dev/null @@ -1 +0,0 @@ -#define FLYCHECK_LOCAL diff --git a/emacs.d/vendor/flycheck/test/resources/language/c_c++/style.cpp b/emacs.d/vendor/flycheck/test/resources/language/c_c++/style.cpp deleted file mode 100644 index 5c57d1b..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/c_c++/style.cpp +++ /dev/null @@ -1,14 +0,0 @@ -int f(int x) -{ - int null = 0; - - int unused; - // cppcheck-suppress unusedVariable - int unused2; - - return x * 2 / null; -} - -std::string foobar(const std::string foo) { - return foo + "bar"; -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/c_c++/style2.cpp b/emacs.d/vendor/flycheck/test/resources/language/c_c++/style2.cpp deleted file mode 100644 index a3a7fba..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/c_c++/style2.cpp +++ /dev/null @@ -1,7 +0,0 @@ -void f(int x) -{ - int i = 0; - if (x) { - for ( ; i < 10; ++i) ; - } -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/c_c++/warning.c b/emacs.d/vendor/flycheck/test/resources/language/c_c++/warning.c deleted file mode 100644 index 4e4de6b..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/c_c++/warning.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -int f(int x) -{ - int unused; - unsigned int y = 10; - return x < y ? ++x : x; - #warning -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/cfengine/error.cf b/emacs.d/vendor/flycheck/test/resources/language/cfengine/error.cf deleted file mode 100644 index 5024404..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cfengine/error.cf +++ /dev/null @@ -1,10 +0,0 @@ -body common control -{ - bundlesequence => { run }; -} - -bundle agent run -{ - nosuchpromisetype: - "huh"; -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/cfengine/warning.cf b/emacs.d/vendor/flycheck/test/resources/language/cfengine/warning.cf deleted file mode 100644 index 5d1be05..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cfengine/warning.cf +++ /dev/null @@ -1,9 +0,0 @@ -body common control -{ - host_licenses_paid => "2000"; - bundlesequence => { run }; -} - -bundle agent run -{ -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/chef/recipes/error.rb b/emacs.d/vendor/flycheck/test/resources/language/chef/recipes/error.rb deleted file mode 100644 index 0705b58..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/chef/recipes/error.rb +++ /dev/null @@ -1,14 +0,0 @@ -# FC002: Avoid string interpolation where not required -package "mysql-server" do - version "#{node['mysql']['version']}" - action :install -end - -# FC003: Check whether you are running with chef server before using server-specific features -nodes = search(:node, "hostname:[* TO *] AND chef_environment:#{node.chef_environment}") - -# FC004: Use a service resource to start and stop services -execute "start-tomcat" do - command "/etc/init.d/tomcat6 start" - action :run -end diff --git a/emacs.d/vendor/flycheck/test/resources/language/chicken/error-no-line-number.scm b/emacs.d/vendor/flycheck/test/resources/language/chicken/error-no-line-number.scm deleted file mode 100644 index 9e84ad6..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/chicken/error-no-line-number.scm +++ /dev/null @@ -1 +0,0 @@ -(for-each ) diff --git a/emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-error-no-line-number.scm b/emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-error-no-line-number.scm deleted file mode 100644 index 6a452c1..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-error-no-line-number.scm +++ /dev/null @@ -1 +0,0 @@ -() diff --git a/emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-error.scm b/emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-error.scm deleted file mode 100644 index 58b173e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-error.scm +++ /dev/null @@ -1 +0,0 @@ -(define ) diff --git a/emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-read-error.scm b/emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-read-error.scm deleted file mode 100644 index f77b91e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/chicken/syntax-read-error.scm +++ /dev/null @@ -1 +0,0 @@ -(define #number 42) diff --git a/emacs.d/vendor/flycheck/test/resources/language/coffee/error.coffee b/emacs.d/vendor/flycheck/test/resources/language/coffee/error.coffee deleted file mode 100644 index 3f6eb1f..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/coffee/error.coffee +++ /dev/null @@ -1,4 +0,0 @@ -# An error/warning caused by throwing a string - -foo = () -> - throw "Hello world" \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/coffee/lint.json b/emacs.d/vendor/flycheck/test/resources/language/coffee/lint.json deleted file mode 100644 index fb3a4fd..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/coffee/lint.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "no_tabs" : { - "level" : "error" - }, - - "no_trailing_whitespace" : { - "level" : "error" - }, - - "max_line_length" : { - "value": 80, - "level" : "error" - }, - - "camel_case_classes" : { - "level" : "error" - }, - - "indentation" : { - "value" : 2, - "level" : "error" - }, - - "no_implicit_braces" : { - "level" : "ignore" - }, - - "no_trailing_semicolons" : { - "level" : "error" - }, - - "no_plusplus" : { - "level" : "ignore" - }, - - "no_throwing_strings" : { - "level" : "warn" - }, - - "cyclomatic_complexity" : { - "value" : 11, - "level" : "ignore" - }, - - "line_endings" : { - "value" : "unix", - "level" : "ignore" - }, - - "no_implicit_parens" : { - "level" : "ignore" - }, - - "no_stand_alone_at" : { - "level": "ignore" - } - -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/coffee/syntax-error.coffee b/emacs.d/vendor/flycheck/test/resources/language/coffee/syntax-error.coffee deleted file mode 100644 index 21bb4c8..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/coffee/syntax-error.coffee +++ /dev/null @@ -1,5 +0,0 @@ -# A syntax error caused by a missing quote - -foo = () -> - bar "Hello world - 1 + 1 \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/coq/error.v b/emacs.d/vendor/flycheck/test/resources/language/coq/error.v deleted file mode 100644 index f7a858f..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/coq/error.v +++ /dev/null @@ -1,10 +0,0 @@ -Module Error. - - Fixpoint evenb (n:nat) : bool := - match n with - | O => true - | S O => false - | S (S n') => 1 - end. - -End Error. diff --git a/emacs.d/vendor/flycheck/test/resources/language/coq/syntax-error.v b/emacs.d/vendor/flycheck/test/resources/language/coq/syntax-error.v deleted file mode 100644 index 0e90730..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/coq/syntax-error.v +++ /dev/null @@ -1,10 +0,0 @@ -Module SyntaxError. - - Fixpoint evenb (n:nat) : bool := - match n with - | O => true - S O => false - | S (S n') => evenb n' - end. - -End SyntaxError. diff --git a/emacs.d/vendor/flycheck/test/resources/language/css/syntax-error.css b/emacs.d/vendor/flycheck/test/resources/language/css/syntax-error.css deleted file mode 100644 index 22e40cd..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/css/syntax-error.css +++ /dev/null @@ -1,5 +0,0 @@ -/** A syntax error caused by a missing brace. */ - -h1 - font-size: 100%; -} \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/css/warning.css b/emacs.d/vendor/flycheck/test/resources/language/css/warning.css deleted file mode 100644 index 1d58949..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/css/warning.css +++ /dev/null @@ -1,5 +0,0 @@ -/** A warning triggered by a qualified heading. */ - -.foo h1 { - font-size: 100%; -} \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/cuda/syntax-error.cu b/emacs.d/vendor/flycheck/test/resources/language/cuda/syntax-error.cu deleted file mode 100644 index 81dba69..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cuda/syntax-error.cu +++ /dev/null @@ -1,3 +0,0 @@ -int main(){ - ac = 3; -} \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/cuda/syntax-warning.cu b/emacs.d/vendor/flycheck/test/resources/language/cuda/syntax-warning.cu deleted file mode 100644 index 5531059..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cuda/syntax-warning.cu +++ /dev/null @@ -1,6 +0,0 @@ -int main(){ - - int b; - b = 3; - -} \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/cwl/cwl.cwl b/emacs.d/vendor/flycheck/test/resources/language/cwl/cwl.cwl deleted file mode 100644 index b5cc349..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cwl/cwl.cwl +++ /dev/null @@ -1,8 +0,0 @@ -cwlVersion: v1.0 -class: CommandLineTool -baseCommand: echo -inputs: - message: - inputBinding: - posi -outputs: {} diff --git a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/CommandLineTool.yml b/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/CommandLineTool.yml deleted file mode 100644 index 7504b1a..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/CommandLineTool.yml +++ /dev/null @@ -1,895 +0,0 @@ -$base: "https://w3id.org/cwl/cwl#" - -$namespaces: - cwl: "https://w3id.org/cwl/cwl#" - sld: "https://w3id.org/cwl/salad#" - -$graph: - -- name: CommandLineToolDoc - type: documentation - doc: - - | - # Common Workflow Language (CWL) Command Line Tool Description, v1.0 - - This version: - * https://w3id.org/cwl/v1.0/ - - Current version: - * https://w3id.org/cwl/ - - "\n\n" - - {$include: contrib.md} - - "\n\n" - - | - # Abstract - - A Command Line Tool is a non-interactive executable program that reads - some input, performs a computation, and terminates after producing some - output. Command line programs are a flexible unit of code sharing and - reuse, unfortunately the syntax and input/output semantics among command - line programs is extremely heterogeneous. A common layer for describing - the syntax and semantics of programs can reduce this incidental - complexity by providing a consistent way to connect programs together. - This specification defines the Common Workflow Language (CWL) Command - Line Tool Description, a vendor-neutral standard for describing the - syntax and input/output semantics of command line programs. - - - {$include: intro.md} - - - | - ## Introduction to v1.0 - - This specification represents the first full release from the CWL group. - Since draft-3, version 1.0 introduces the following changes and additions: - - * The [Directory](#Directory) type. - * Syntax simplifcations: denoted by the `map<>` syntax. Example: inputs - contains a list of items, each with an id. Now one can specify - a mapping of that identifier to the corresponding - `CommandInputParamater`. - ``` - inputs: - - id: one - type: string - doc: First input parameter - - id: two - type: int - doc: Second input parameter - ``` - can be - ``` - inputs: - one: - type: string - doc: First input parameter - two: - type: int - doc: Second input parameter - ``` - * [InitialWorkDirRequirement](#InitialWorkDirRequirement): list of - files and subdirectories to be present in the output directory prior - to execution. - * Shortcuts for specifying the standard [output](#stdout) and/or - [error](#stderr) streams as a (streamable) File output. - * [SoftwareRequirement](#SoftwareRequirement) for describing software - dependencies of a tool. - * The common `description` field has been renamed to `doc`. - - ## Errata - - Post v1.0 release changes to the spec. - - * 13 July 2016: Mark `baseCommand` as optional and update descriptive text. - - ## Purpose - - Standalone programs are a flexible and interoperable form of code reuse. - Unlike monolithic applications, applications and analysis workflows which - are composed of multiple separate programs can be written in multiple - languages and execute concurrently on multiple hosts. However, POSIX - does not dictate computer-readable grammar or semantics for program input - and output, resulting in extremely heterogeneous command line grammar and - input/output semantics among program. This is a particular problem in - distributed computing (multi-node compute clusters) and virtualized - environments (such as Docker containers) where it is often necessary to - provision resources such as input files before executing the program. - - Often this gap is filled by hard coding program invocation and - implicitly assuming requirements will be met, or abstracting program - invocation with wrapper scripts or descriptor documents. Unfortunately, - where these approaches are application or platform specific it creates a - significant barrier to reproducibility and portability, as methods - developed for one platform must be manually ported to be used on new - platforms. Similarly it creates redundant work, as wrappers for popular - tools must be rewritten for each application or platform in use. - - The Common Workflow Language Command Line Tool Description is designed to - provide a common standard description of grammar and semantics for - invoking programs used in data-intensive fields such as Bioinformatics, - Chemistry, Physics, Astronomy, and Statistics. This specification - defines a precise data and execution model for Command Line Tools that - can be implemented on a variety of computing platforms, ranging from a - single workstation to cluster, grid, cloud, and high performance - computing platforms. - - - {$include: concepts.md} - - {$include: invocation.md} - - -- type: record - name: EnvironmentDef - doc: | - Define an environment variable that will be set in the runtime environment - by the workflow platform when executing the command line tool. May be the - result of executing an expression, such as getting a parameter from input. - fields: - - name: envName - type: string - doc: The environment variable name - - name: envValue - type: [string, Expression] - doc: The environment variable value - -- type: record - name: CommandLineBinding - extends: InputBinding - doc: | - - When listed under `inputBinding` in the input schema, the term - "value" refers to the the corresponding value in the input object. For - binding objects listed in `CommandLineTool.arguments`, the term "value" - refers to the effective value after evaluating `valueFrom`. - - The binding behavior when building the command line depends on the data - type of the value. If there is a mismatch between the type described by - the input schema and the effective value, such as resulting from an - expression evaluation, an implementation must use the data type of the - effective value. - - - **string**: Add `prefix` and the string to the command line. - - - **number**: Add `prefix` and decimal representation to command line. - - - **boolean**: If true, add `prefix` to the command line. If false, add - nothing. - - - **File**: Add `prefix` and the value of - [`File.path`](#File) to the command line. - - - **array**: If `itemSeparator` is specified, add `prefix` and the join - the array into a single string with `itemSeparator` separating the - items. Otherwise first add `prefix`, then recursively process - individual elements. - - - **object**: Add `prefix` only, and recursively add object fields for - which `inputBinding` is specified. - - - **null**: Add nothing. - - fields: - - name: position - type: int? - doc: "The sorting key. Default position is 0." - - name: prefix - type: string? - doc: "Command line prefix to add before the value." - - name: separate - type: boolean? - doc: | - If true (default), then the prefix and value must be added as separate - command line arguments; if false, prefix and value must be concatenated - into a single command line argument. - - name: itemSeparator - type: string? - doc: | - Join the array elements into a single string with the elements - separated by by `itemSeparator`. - - name: valueFrom - type: - - "null" - - string - - Expression - jsonldPredicate: "cwl:valueFrom" - doc: | - If `valueFrom` is a constant string value, use this as the value and - apply the binding rules above. - - If `valueFrom` is an expression, evaluate the expression to yield the - actual value to use to build the command line and apply the binding - rules above. If the inputBinding is associated with an input - parameter, the value of `self` in the expression will be the value of the - input parameter. - - When a binding is part of the `CommandLineTool.arguments` field, - the `valueFrom` field is required. - - name: shellQuote - type: boolean? - doc: | - If `ShellCommandRequirement` is in the requirements for the current command, - this controls whether the value is quoted on the command line (default is true). - Use `shellQuote: false` to inject metacharacters for operations such as pipes. - -- type: record - name: CommandOutputBinding - extends: OutputBinding - doc: | - Describes how to generate an output parameter based on the files produced - by a CommandLineTool. - - The output parameter is generated by applying these operations in - the following order: - - - glob - - loadContents - - outputEval - fields: - - name: glob - type: - - "null" - - string - - Expression - - type: array - items: string - doc: | - Find files relative to the output directory, using POSIX glob(3) - pathname matching. If an array is provided, find files that match any - pattern in the array. If an expression is provided, the expression must - return a string or an array of strings, which will then be evaluated as - one or more glob patterns. Must only match and return files which - actually exist. - - name: loadContents - type: - - "null" - - boolean - jsonldPredicate: "cwl:loadContents" - doc: | - For each file matched in `glob`, read up to - the first 64 KiB of text from the file and place it in the `contents` - field of the file object for manipulation by `outputEval`. - - name: outputEval - type: - - "null" - - string - - Expression - doc: | - Evaluate an expression to generate the output value. If `glob` was - specified, the value of `self` must be an array containing file objects - that were matched. If no files were matched, `self` must be a zero - length array; if a single file was matched, the value of `self` is an - array of a single element. Additionally, if `loadContents` is `true`, - the File objects must include up to the first 64 KiB of file contents - in the `contents` field. - - -- name: CommandInputRecordField - type: record - extends: InputRecordField - specialize: - - specializeFrom: InputRecordSchema - specializeTo: CommandInputRecordSchema - - specializeFrom: InputEnumSchema - specializeTo: CommandInputEnumSchema - - specializeFrom: InputArraySchema - specializeTo: CommandInputArraySchema - - specializeFrom: InputBinding - specializeTo: CommandLineBinding - - -- name: CommandInputRecordSchema - type: record - extends: InputRecordSchema - specialize: - - specializeFrom: InputRecordField - specializeTo: CommandInputRecordField - - -- name: CommandInputEnumSchema - type: record - extends: InputEnumSchema - specialize: - - specializeFrom: InputBinding - specializeTo: CommandLineBinding - - -- name: CommandInputArraySchema - type: record - extends: InputArraySchema - specialize: - - specializeFrom: InputRecordSchema - specializeTo: CommandInputRecordSchema - - specializeFrom: InputEnumSchema - specializeTo: CommandInputEnumSchema - - specializeFrom: InputArraySchema - specializeTo: CommandInputArraySchema - - specializeFrom: InputBinding - specializeTo: CommandLineBinding - - -- name: CommandOutputRecordField - type: record - extends: OutputRecordField - specialize: - - specializeFrom: OutputRecordSchema - specializeTo: CommandOutputRecordSchema - - specializeFrom: OutputEnumSchema - specializeTo: CommandOutputEnumSchema - - specializeFrom: OutputArraySchema - specializeTo: CommandOutputArraySchema - - specializeFrom: OutputBinding - specializeTo: CommandOutputBinding - - -- name: CommandOutputRecordSchema - type: record - extends: OutputRecordSchema - specialize: - - specializeFrom: OutputRecordField - specializeTo: CommandOutputRecordField - - -- name: CommandOutputEnumSchema - type: record - extends: OutputEnumSchema - specialize: - - specializeFrom: OutputRecordSchema - specializeTo: CommandOutputRecordSchema - - specializeFrom: OutputEnumSchema - specializeTo: CommandOutputEnumSchema - - specializeFrom: OutputArraySchema - specializeTo: CommandOutputArraySchema - - specializeFrom: OutputBinding - specializeTo: CommandOutputBinding - - -- name: CommandOutputArraySchema - type: record - extends: OutputArraySchema - specialize: - - specializeFrom: OutputRecordSchema - specializeTo: CommandOutputRecordSchema - - specializeFrom: OutputEnumSchema - specializeTo: CommandOutputEnumSchema - - specializeFrom: OutputArraySchema - specializeTo: CommandOutputArraySchema - - specializeFrom: OutputBinding - specializeTo: CommandOutputBinding - - -- type: record - name: CommandInputParameter - extends: InputParameter - doc: An input parameter for a CommandLineTool. - specialize: - - specializeFrom: InputRecordSchema - specializeTo: CommandInputRecordSchema - - specializeFrom: InputEnumSchema - specializeTo: CommandInputEnumSchema - - specializeFrom: InputArraySchema - specializeTo: CommandInputArraySchema - - specializeFrom: InputBinding - specializeTo: CommandLineBinding - -- type: record - name: CommandOutputParameter - extends: OutputParameter - doc: An output parameter for a CommandLineTool. - specialize: - - specializeFrom: OutputBinding - specializeTo: CommandOutputBinding - fields: - - name: type - type: - - "null" - - CWLType - - stdout - - stderr - - CommandOutputRecordSchema - - CommandOutputEnumSchema - - CommandOutputArraySchema - - string - - type: array - items: - - CWLType - - CommandOutputRecordSchema - - CommandOutputEnumSchema - - CommandOutputArraySchema - - string - jsonldPredicate: - "_id": "sld:type" - "_type": "@vocab" - refScope: 2 - typeDSL: True - doc: | - Specify valid types of data that may be assigned to this parameter. - -- name: stdout - type: enum - symbols: [ "cwl:stdout" ] - docParent: "#CommandOutputParameter" - doc: | - Only valid as a `type` for a `CommandLineTool` output with no - `outputBinding` set. - - The following - ``` - outputs: - an_output_name: - type: stdout - - stdout: a_stdout_file - ``` - is equivalent to - ``` - outputs: - an_output_name: - type: File - streamable: true - outputBinding: - glob: a_stdout_file - - stdout: a_stdout_file - ``` - - If there is no `stdout` name provided, a random filename will be created. - For example, the following - ``` - outputs: - an_output_name: - type: stdout - ``` - is equivalent to - ``` - outputs: - an_output_name: - type: File - streamable: true - outputBinding: - glob: random_stdout_filenameABCDEFG - - stdout: random_stdout_filenameABCDEFG - ``` - - -- name: stderr - type: enum - symbols: [ "cwl:stderr" ] - docParent: "#CommandOutputParameter" - doc: | - Only valid as a `type` for a `CommandLineTool` output with no - `outputBinding` set. - - The following - ``` - outputs: - an_output_name: - type: stderr - - stderr: a_stderr_file - ``` - is equivalent to - ``` - outputs: - an_output_name: - type: File - streamable: true - outputBinding: - glob: a_stderr_file - - stderr: a_stderr_file - ``` - - If there is no `stderr` name provided, a random filename will be created. - For example, the following - ``` - outputs: - an_output_name: - type: stderr - ``` - is equivalent to - ``` - outputs: - an_output_name: - type: File - streamable: true - outputBinding: - glob: random_stderr_filenameABCDEFG - - stderr: random_stderr_filenameABCDEFG - ``` - - -- type: record - name: CommandLineTool - extends: Process - documentRoot: true - specialize: - - specializeFrom: InputParameter - specializeTo: CommandInputParameter - - specializeFrom: OutputParameter - specializeTo: CommandOutputParameter - doc: | - This defines the schema of the CWL Command Line Tool Description document. - - fields: - - name: class - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - type: string - - name: baseCommand - doc: | - Specifies the program to execute. If an array, the first element of - the array is the command to execute, and subsequent elements are - mandatory command line arguments. The elements in `baseCommand` must - appear before any command line bindings from `inputBinding` or - `arguments`. - - If `baseCommand` is not provided or is an empty array, the first - element of the command line produced after processing `inputBinding` or - `arguments` must be used as the program to execute. - - If the program includes a path separator character it must - be an absolute path, otherwise it is an error. If the program does not - include a path separator, search the `$PATH` variable in the runtime - environment of the workflow runner find the absolute path of the - executable. - type: - - string? - - string[]? - jsonldPredicate: - "_id": "cwl:baseCommand" - "_container": "@list" - - name: arguments - doc: | - Command line bindings which are not directly associated with input parameters. - type: - - "null" - - type: array - items: [string, Expression, CommandLineBinding] - jsonldPredicate: - "_id": "cwl:arguments" - "_container": "@list" - - name: stdin - type: ["null", string, Expression] - doc: | - A path to a file whose contents must be piped into the command's - standard input stream. - - name: stderr - type: ["null", string, Expression] - jsonldPredicate: "https://w3id.org/cwl/cwl#stderr" - doc: | - Capture the command's standard error stream to a file written to - the designated output directory. - - If `stderr` is a string, it specifies the file name to use. - - If `stderr` is an expression, the expression is evaluated and must - return a string with the file name to use to capture stderr. If the - return value is not a string, or the resulting path contains illegal - characters (such as the path separator `/`) it is an error. - - name: stdout - type: ["null", string, Expression] - jsonldPredicate: "https://w3id.org/cwl/cwl#stdout" - doc: | - Capture the command's standard output stream to a file written to - the designated output directory. - - If `stdout` is a string, it specifies the file name to use. - - If `stdout` is an expression, the expression is evaluated and must - return a string with the file name to use to capture stdout. If the - return value is not a string, or the resulting path contains illegal - characters (such as the path separator `/`) it is an error. - - name: successCodes - type: int[]? - doc: | - Exit codes that indicate the process completed successfully. - - - name: temporaryFailCodes - type: int[]? - doc: | - Exit codes that indicate the process failed due to a possibly - temporary condition, where executing the process with the same - runtime environment and inputs may produce different results. - - - name: permanentFailCodes - type: int[]? - doc: - Exit codes that indicate the process failed due to a permanent logic - error, where executing the process with the same runtime environment and - same inputs is expected to always fail. - - -- type: record - name: DockerRequirement - extends: ProcessRequirement - doc: | - Indicates that a workflow component should be run in a - [Docker](http://docker.com) container, and specifies how to fetch or build - the image. - - If a CommandLineTool lists `DockerRequirement` under - `hints` (or `requirements`), it may (or must) be run in the specified Docker - container. - - The platform must first acquire or install the correct Docker image as - specified by `dockerPull`, `dockerImport`, `dockerLoad` or `dockerFile`. - - The platform must execute the tool in the container using `docker run` with - the appropriate Docker image and tool command line. - - The workflow platform may provide input files and the designated output - directory through the use of volume bind mounts. The platform may rewrite - file paths in the input object to correspond to the Docker bind mounted - locations. - - When running a tool contained in Docker, the workflow platform must not - assume anything about the contents of the Docker container, such as the - presence or absence of specific software, except to assume that the - generated command line represents a valid command within the runtime - environment of the container. - - ## Interaction with other requirements - - If [EnvVarRequirement](#EnvVarRequirement) is specified alongside a - DockerRequirement, the environment variables must be provided to Docker - using `--env` or `--env-file` and interact with the container's preexisting - environment as defined by Docker. - - fields: - - name: class - type: string - doc: "Always 'DockerRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - - name: dockerPull - type: string? - doc: "Specify a Docker image to retrieve using `docker pull`." - - name: dockerLoad - type: string? - doc: "Specify a HTTP URL from which to download a Docker image using `docker load`." - - name: dockerFile - type: string? - doc: "Supply the contents of a Dockerfile which will be built using `docker build`." - - name: dockerImport - type: string? - doc: "Provide HTTP URL to download and gunzip a Docker images using `docker import." - - name: dockerImageId - type: string? - doc: | - The image id that will be used for `docker run`. May be a - human-readable image name or the image identifier hash. May be skipped - if `dockerPull` is specified, in which case the `dockerPull` image id - must be used. - - name: dockerOutputDirectory - type: string? - doc: | - Set the designated output directory to a specific location inside the - Docker container. - - -- type: record - name: SoftwareRequirement - extends: ProcessRequirement - doc: | - A list of software packages that should be configured in the environment of - the defined process. - fields: - - name: class - type: string - doc: "Always 'SoftwareRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - - name: packages - type: SoftwarePackage[] - doc: "The list of software to be configured." - jsonldPredicate: - mapSubject: package - mapPredicate: specs - -- name: SoftwarePackage - type: record - fields: - - name: package - type: string - doc: "The common name of the software to be configured." - - name: version - type: string[]? - doc: "The (optional) version of the software to configured." - - name: specs - type: string[]? - doc: | - Must be one or more IRIs identifying resources for installing or - enabling the software. Implementations may provide resolvers which map - well-known software spec IRIs to some configuration action. - - For example, an IRI `https://packages.debian.org/jessie/bowtie` could - be resolved with `apt-get install bowtie`. An IRI - `https://anaconda.org/bioconda/bowtie` could be resolved with `conda - install -c bioconda bowtie`. - - Tools may also provide IRIs to index entries such as - [RRID](http://www.identifiers.org/rrid/), such as - `http://identifiers.org/rrid/RRID:SCR_005476` - - -- name: Dirent - type: record - doc: | - Define a file or subdirectory that must be placed in the designated output - directory prior to executing the command line tool. May be the result of - executing an expression, such as building a configuration file from a - template. - fields: - - name: entryname - type: ["null", string, Expression] - jsonldPredicate: - _id: cwl:entryname - doc: | - The name of the file or subdirectory to create in the output directory. - If `entry` is a File or Directory, this overrides `basename`. Optional. - - name: entry - type: [string, Expression] - jsonldPredicate: - _id: cwl:entry - doc: | - If the value is a string literal or an expression which evaluates to a - string, a new file must be created with the string as the file contents. - - If the value is an expression that evaluates to a `File` object, this - indicates the referenced file should be added to the designated output - directory prior to executing the tool. - - If the value is an expression that evaluates to a `Dirent` object, this - indicates that the File or Directory in `entry` should be added to the - designated output directory with the name in `entryname`. - - If `writable` is false, the file may be made available using a bind - mount or file system link to avoid unnecessary copying of the input - file. - - name: writable - type: boolean? - doc: | - If true, the file or directory must be writable by the tool. Changes - to the file or directory must be isolated and not visible by any other - CommandLineTool process. This may be implemented by making a copy of - the original file or directory. Default false (files and directories - read-only by default). - - -- name: InitialWorkDirRequirement - type: record - extends: ProcessRequirement - doc: - Define a list of files and subdirectories that must be created by the - workflow platform in the designated output directory prior to executing the - command line tool. - fields: - - name: class - type: string - doc: InitialWorkDirRequirement - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - - name: listing - type: - - type: array - items: [File, Directory, Dirent, string, Expression] - - string - - Expression - jsonldPredicate: - _id: "cwl:listing" - doc: | - The list of files or subdirectories that must be placed in the - designated output directory prior to executing the command line tool. - - May be an expression. If so, the expression return value must validate - as `{type: array, items: [File, Directory]}`. - - -- name: EnvVarRequirement - type: record - extends: ProcessRequirement - doc: | - Define a list of environment variables which will be set in the - execution environment of the tool. See `EnvironmentDef` for details. - fields: - - name: class - type: string - doc: "Always 'EnvVarRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - - name: envDef - type: EnvironmentDef[] - doc: The list of environment variables. - jsonldPredicate: - mapSubject: envName - mapPredicate: envValue - - -- type: record - name: ShellCommandRequirement - extends: ProcessRequirement - doc: | - Modify the behavior of CommandLineTool to generate a single string - containing a shell command line. Each item in the argument list must be - joined into a string separated by single spaces and quoted to prevent - interpretation by the shell, unless `CommandLineBinding` for that argument - contains `shellQuote: false`. If `shellQuote: false` is specified, the - argument is joined into the command string without quoting, which allows - the use of shell metacharacters such as `|` for pipes. - fields: - - name: class - type: string - doc: "Always 'ShellCommandRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - - -- type: record - name: ResourceRequirement - extends: ProcessRequirement - doc: | - Specify basic hardware resource requirements. - - "min" is the minimum amount of a resource that must be reserved to schedule - a job. If "min" cannot be satisfied, the job should not be run. - - "max" is the maximum amount of a resource that the job shall be permitted - to use. If a node has sufficient resources, multiple jobs may be scheduled - on a single node provided each job's "max" resource requirements are - met. If a job attempts to exceed its "max" resource allocation, an - implementation may deny additional resources, which may result in job - failure. - - If "min" is specified but "max" is not, then "max" == "min" - If "max" is specified by "min" is not, then "min" == "max". - - It is an error if max < min. - - It is an error if the value of any of these fields is negative. - - If neither "min" nor "max" is specified for a resource, an implementation may provide a default. - - fields: - - name: class - type: string - doc: "Always 'ResourceRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - - name: coresMin - type: ["null", long, string, Expression] - doc: Minimum reserved number of CPU cores - - - name: coresMax - type: ["null", int, string, Expression] - doc: Maximum reserved number of CPU cores - - - name: ramMin - type: ["null", long, string, Expression] - doc: Minimum reserved RAM in mebibytes (2**20) - - - name: ramMax - type: ["null", long, string, Expression] - doc: Maximum reserved RAM in mebibytes (2**20) - - - name: tmpdirMin - type: ["null", long, string, Expression] - doc: Minimum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20) - - - name: tmpdirMax - type: ["null", long, string, Expression] - doc: Maximum reserved filesystem based storage for the designated temporary directory, in mebibytes (2**20) - - - name: outdirMin - type: ["null", long, string, Expression] - doc: Minimum reserved filesystem based storage for the designated output directory, in mebibytes (2**20) - - - name: outdirMax - type: ["null", long, string, Expression] - doc: Maximum reserved filesystem based storage for the designated output directory, in mebibytes (2**20) diff --git a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/CommonWorkflowLanguage.yml b/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/CommonWorkflowLanguage.yml deleted file mode 100644 index 73921e8..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/CommonWorkflowLanguage.yml +++ /dev/null @@ -1,11 +0,0 @@ -$base: "https://w3id.org/cwl/cwl#" - -$namespaces: - cwl: "https://w3id.org/cwl/cwl#" - sld: "https://w3id.org/cwl/salad#" - -$graph: - -- $import: Process.yml -- $import: CommandLineTool.yml -- $import: Workflow.yml diff --git a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/Process.yml b/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/Process.yml deleted file mode 100644 index 7c96b85..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/Process.yml +++ /dev/null @@ -1,743 +0,0 @@ -$base: "https://w3id.org/cwl/cwl#" - -$namespaces: - cwl: "https://w3id.org/cwl/cwl#" - sld: "https://w3id.org/cwl/salad#" - -$graph: - -- name: "Common Workflow Language, v1.0" - type: documentation - doc: {$include: concepts.md} - -- $import: "metaschema_base.yml" - -- name: BaseTypesDoc - type: documentation - doc: | - ## Base types - docChild: - - "#CWLType" - - "#Process" - -- type: enum - name: CWLVersion - doc: "Version symbols for published CWL document versions." - symbols: - - cwl:draft-2 - - cwl:draft-3.dev1 - - cwl:draft-3.dev2 - - cwl:draft-3.dev3 - - cwl:draft-3.dev4 - - cwl:draft-3.dev5 - - cwl:draft-3 - - cwl:draft-4.dev1 - - cwl:draft-4.dev2 - - cwl:draft-4.dev3 - - cwl:v1.0.dev4 - - cwl:v1.0 - -- name: CWLType - type: enum - extends: "sld:PrimitiveType" - symbols: - - cwl:File - - cwl:Directory - doc: - - "Extends primitive types with the concept of a file and directory as a builtin type." - - "File: A File object" - - "Directory: A Directory object" - -- name: File - type: record - docParent: "#CWLType" - doc: | - Represents a file (or group of files if `secondaryFiles` is specified) that - must be accessible by tools using standard POSIX file system call API such as - open(2) and read(2). - fields: - - name: class - type: - type: enum - name: File_class - symbols: - - cwl:File - jsonldPredicate: - _id: "@type" - _type: "@vocab" - doc: Must be `File` to indicate this object describes a file. - - name: location - type: string? - doc: | - An IRI that identifies the file resource. This may be a relative - reference, in which case it must be resolved using the base IRI of the - document. The location may refer to a local or remote resource; the - implementation must use the IRI to retrieve file content. If an - implementation is unable to retrieve the file content stored at a - remote resource (due to unsupported protocol, access denied, or other - issue) it must signal an error. - - If the `location` field is not provided, the `contents` field must be - provided. The implementation must assign a unique identifier for - the `location` field. - - If the `path` field is provided but the `location` field is not, an - implementation may assign the value of the `path` field to `location`, - then follow the rules above. - jsonldPredicate: - _id: "@id" - _type: "@id" - - name: path - type: string? - doc: | - The local host path where the File is available when a CommandLineTool is - executed. This field must be set by the implementation. The final - path component must match the value of `basename`. This field - must not be used in any other context. The command line tool being - executed must be able to to access the file at `path` using the POSIX - `open(2)` syscall. - - As a special case, if the `path` field is provided but the `location` - field is not, an implementation may assign the value of the `path` - field to `location`, and remove the `path` field. - - If the `path` contains [POSIX shell metacharacters](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02) - (`|`,`&`, `;`, `<`, `>`, `(`,`)`, `$`,`` ` ``, `\`, `"`, `'`, - ``, ``, and ``) or characters - [not allowed](http://www.iana.org/assignments/idna-tables-6.3.0/idna-tables-6.3.0.xhtml) - for [Internationalized Domain Names for Applications](https://tools.ietf.org/html/rfc6452) - then implementations may terminate the process with a - `permanentFailure`. - jsonldPredicate: - "_id": "cwl:path" - "_type": "@id" - - name: basename - type: string? - doc: | - The base name of the file, that is, the name of the file without any - leading directory path. The base name must not contain a slash `/`. - - If not provided, the implementation must set this field based on the - `location` field by taking the final path component after parsing - `location` as an IRI. If `basename` is provided, it is not required to - match the value from `location`. - - When this file is made available to a CommandLineTool, it must be named - with `basename`, i.e. the final component of the `path` field must match - `basename`. - jsonldPredicate: "cwl:basename" - - name: dirname - type: string? - doc: | - The name of the directory containing file, that is, the path leading up - to the final slash in the path such that `dirname + '/' + basename == - path`. - - The implementation must set this field based on the value of `path` - prior to evaluating parameter references or expressions in a - CommandLineTool document. This field must not be used in any other - context. - - name: nameroot - type: string? - doc: | - The basename root such that `nameroot + nameext == basename`, and - `nameext` is empty or begins with a period and contains at most one - period. For the purposess of path splitting leading periods on the - basename are ignored; a basename of `.cshrc` will have a nameroot of - `.cshrc`. - - The implementation must set this field automatically based on the value - of `basename` prior to evaluating parameter references or expressions. - - name: nameext - type: string? - doc: | - The basename extension such that `nameroot + nameext == basename`, and - `nameext` is empty or begins with a period and contains at most one - period. Leading periods on the basename are ignored; a basename of - `.cshrc` will have an empty `nameext`. - - The implementation must set this field automatically based on the value - of `basename` prior to evaluating parameter references or expressions. - - name: checksum - type: string? - doc: | - Optional hash code for validating file integrity. Currently must be in the form - "sha1$ + hexadecimal string" using the SHA-1 algorithm. - - name: size - type: long? - doc: Optional file size - - name: "secondaryFiles" - type: - - "null" - - type: array - items: [File, Directory] - jsonldPredicate: "cwl:secondaryFiles" - doc: | - A list of additional files that are associated with the primary file - and must be transferred alongside the primary file. Examples include - indexes of the primary file, or external references which must be - included when loading primary document. A file object listed in - `secondaryFiles` may itself include `secondaryFiles` for which the same - rules apply. - - name: format - type: string? - jsonldPredicate: - _id: cwl:format - _type: "@id" - identity: true - doc: | - The format of the file: this must be an IRI of a concept node that - represents the file format, preferably defined within an ontology. - If no ontology is available, file formats may be tested by exact match. - - Reasoning about format compatibility must be done by checking that an - input file format is the same, `owl:equivalentClass` or - `rdfs:subClassOf` the format required by the input parameter. - `owl:equivalentClass` is transitive with `rdfs:subClassOf`, e.g. if - ` owl:equivalentClass ` and ` owl:subclassOf ` then infer - ` owl:subclassOf `. - - File format ontologies may be provided in the "$schema" metadata at the - root of the document. If no ontologies are specified in `$schema`, the - runtime may perform exact file format matches. - - name: contents - type: string? - doc: | - File contents literal. Maximum of 64 KiB. - - If neither `location` nor `path` is provided, `contents` must be - non-null. The implementation must assign a unique identifier for the - `location` field. When the file is staged as input to CommandLineTool, - the value of `contents` must be written to a file. - - If `loadContents` of `inputBinding` or `outputBinding` is true and - `location` is valid, the implementation must read up to the first 64 - KiB of text from the file and place it in the "contents" field. - - -- name: Directory - type: record - docAfter: "#File" - doc: | - Represents a directory to present to a command line tool. - fields: - - name: class - type: - type: enum - name: Directory_class - symbols: - - cwl:Directory - jsonldPredicate: - _id: "@type" - _type: "@vocab" - doc: Must be `Directory` to indicate this object describes a Directory. - - name: location - type: string? - doc: | - An IRI that identifies the directory resource. This may be a relative - reference, in which case it must be resolved using the base IRI of the - document. The location may refer to a local or remote resource. If - the `listing` field is not set, the implementation must use the - location IRI to retrieve directory listing. If an implementation is - unable to retrieve the directory listing stored at a remote resource (due to - unsupported protocol, access denied, or other issue) it must signal an - error. - - If the `location` field is not provided, the `listing` field must be - provided. The implementation must assign a unique identifier for - the `location` field. - - If the `path` field is provided but the `location` field is not, an - implementation may assign the value of the `path` field to `location`, - then follow the rules above. - jsonldPredicate: - _id: "@id" - _type: "@id" - - name: path - type: string? - doc: | - The local path where the Directory is made available prior to executing a - CommandLineTool. This must be set by the implementation. This field - must not be used in any other context. The command line tool being - executed must be able to to access the directory at `path` using the POSIX - `opendir(2)` syscall. - - If the `path` contains [POSIX shell metacharacters](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02) - (`|`,`&`, `;`, `<`, `>`, `(`,`)`, `$`,`` ` ``, `\`, `"`, `'`, - ``, ``, and ``) or characters - [not allowed](http://www.iana.org/assignments/idna-tables-6.3.0/idna-tables-6.3.0.xhtml) - for [Internationalized Domain Names for Applications](https://tools.ietf.org/html/rfc6452) - then implementations may terminate the process with a - `permanentFailure`. - jsonldPredicate: - _id: "cwl:path" - _type: "@id" - - name: basename - type: string? - doc: | - The base name of the directory, that is, the name of the file without any - leading directory path. The base name must not contain a slash `/`. - - If not provided, the implementation must set this field based on the - `location` field by taking the final path component after parsing - `location` as an IRI. If `basename` is provided, it is not required to - match the value from `location`. - - When this file is made available to a CommandLineTool, it must be named - with `basename`, i.e. the final component of the `path` field must match - `basename`. - jsonldPredicate: "cwl:basename" - - name: listing - type: - - "null" - - type: array - items: [File, Directory] - doc: | - List of files or subdirectories contained in this directory. The name - of each file or subdirectory is determined by the `basename` field of - each `File` or `Directory` object. It is an error if a `File` shares a - `basename` with any other entry in `listing`. If two or more - `Directory` object share the same `basename`, this must be treated as - equivalent to a single subdirectory with the listings recursively - merged. - jsonldPredicate: - _id: "cwl:listing" - -- name: SchemaBase - type: record - abstract: true - fields: - - name: label - type: - - "null" - - string - jsonldPredicate: "rdfs:label" - doc: "A short, human-readable label of this object." - - -- name: Parameter - type: record - extends: SchemaBase - abstract: true - doc: | - Define an input or output parameter to a process. - - fields: - - name: secondaryFiles - type: - - "null" - - string - - Expression - - type: array - items: [string, Expression] - jsonldPredicate: "cwl:secondaryFiles" - doc: | - Only valid when `type: File` or is an array of `items: File`. - - Describes files that must be included alongside the primary file(s). - - If the value is an expression, the value of `self` in the expression - must be the primary input or output File to which this binding applies. - - If the value is a string, it specifies that the following pattern - should be applied to the primary file: - - 1. If string begins with one or more caret `^` characters, for each - caret, remove the last file extension from the path (the last - period `.` and all following characters). If there are no file - extensions, the path is unchanged. - 2. Append the remainder of the string to the end of the file path. - - - name: format - type: - - "null" - - string - - type: array - items: string - - Expression - jsonldPredicate: - _id: cwl:format - _type: "@id" - identity: true - doc: | - Only valid when `type: File` or is an array of `items: File`. - - For input parameters, this must be one or more IRIs of concept nodes - that represents file formats which are allowed as input to this - parameter, preferably defined within an ontology. If no ontology is - available, file formats may be tested by exact match. - - For output parameters, this is the file format that will be assigned to - the output parameter. - - - name: streamable - type: boolean? - doc: | - Only valid when `type: File` or is an array of `items: File`. - - A value of `true` indicates that the file is read or written - sequentially without seeking. An implementation may use this flag to - indicate whether it is valid to stream file contents using a named - pipe. Default: `false`. - - - name: doc - type: - - string? - - string[]? - doc: "A documentation string for this type, or an array of strings which should be concatenated." - jsonldPredicate: "rdfs:comment" - - -- type: enum - name: Expression - doc: | - 'Expression' is not a real type. It indicates that a field must allow - runtime parameter references. If [InlineJavascriptRequirement](#InlineJavascriptRequirement) - is declared and supported by the platform, the field must also allow - Javascript expressions. - symbols: - - cwl:ExpressionPlaceholder - - -- name: InputBinding - type: record - abstract: true - fields: - - name: loadContents - type: - - "null" - - boolean - jsonldPredicate: "cwl:loadContents" - doc: | - Only valid when `type: File` or is an array of `items: File`. - - Read up to the first 64 KiB of text from the file and place it in the - "contents" field of the file object for use by expressions. - - -- name: OutputBinding - type: record - abstract: true - - -- name: InputSchema - extends: SchemaBase - type: record - abstract: true - - -- name: OutputSchema - extends: SchemaBase - type: record - abstract: true - - -- name: InputRecordField - type: record - extends: "sld:RecordField" - specialize: - - specializeFrom: "sld:RecordSchema" - specializeTo: InputRecordSchema - - specializeFrom: "sld:EnumSchema" - specializeTo: InputEnumSchema - - specializeFrom: "sld:ArraySchema" - specializeTo: InputArraySchema - - specializeFrom: "sld:PrimitiveType" - specializeTo: CWLType - fields: - - name: inputBinding - type: InputBinding? - jsonldPredicate: "cwl:inputBinding" - - name: label - type: string? - jsonldPredicate: "rdfs:label" - doc: "A short, human-readable label of this process object." - - -- name: InputRecordSchema - type: record - extends: ["sld:RecordSchema", InputSchema] - specialize: - - specializeFrom: "sld:RecordField" - specializeTo: InputRecordField - - -- name: InputEnumSchema - type: record - extends: ["sld:EnumSchema", InputSchema] - fields: - - name: inputBinding - type: InputBinding? - jsonldPredicate: "cwl:inputBinding" - - -- name: InputArraySchema - type: record - extends: ["sld:ArraySchema", InputSchema] - specialize: - - specializeFrom: "sld:RecordSchema" - specializeTo: InputRecordSchema - - specializeFrom: "sld:EnumSchema" - specializeTo: InputEnumSchema - - specializeFrom: "sld:ArraySchema" - specializeTo: InputArraySchema - - specializeFrom: "sld:PrimitiveType" - specializeTo: CWLType - fields: - - name: inputBinding - type: InputBinding? - jsonldPredicate: "cwl:inputBinding" - - -- name: OutputRecordField - type: record - extends: "sld:RecordField" - specialize: - - specializeFrom: "sld:RecordSchema" - specializeTo: OutputRecordSchema - - specializeFrom: "sld:EnumSchema" - specializeTo: OutputEnumSchema - - specializeFrom: "sld:ArraySchema" - specializeTo: OutputArraySchema - - specializeFrom: "sld:PrimitiveType" - specializeTo: CWLType - fields: - - name: outputBinding - type: OutputBinding? - jsonldPredicate: "cwl:outputBinding" - - -- name: OutputRecordSchema - type: record - extends: ["sld:RecordSchema", "#OutputSchema"] - docParent: "#OutputParameter" - specialize: - - specializeFrom: "sld:RecordField" - specializeTo: OutputRecordField - - -- name: OutputEnumSchema - type: record - extends: ["sld:EnumSchema", OutputSchema] - docParent: "#OutputParameter" - fields: - - name: outputBinding - type: OutputBinding? - jsonldPredicate: "cwl:outputBinding" - -- name: OutputArraySchema - type: record - extends: ["sld:ArraySchema", OutputSchema] - docParent: "#OutputParameter" - specialize: - - specializeFrom: "sld:RecordSchema" - specializeTo: OutputRecordSchema - - specializeFrom: "sld:EnumSchema" - specializeTo: OutputEnumSchema - - specializeFrom: "sld:ArraySchema" - specializeTo: OutputArraySchema - - specializeFrom: "sld:PrimitiveType" - specializeTo: CWLType - fields: - - name: outputBinding - type: OutputBinding? - jsonldPredicate: "cwl:outputBinding" - - -- name: InputParameter - type: record - extends: Parameter - fields: - - name: id - type: string - jsonldPredicate: "@id" - doc: "The unique identifier for this parameter object." - - - name: inputBinding - type: InputBinding? - jsonldPredicate: "cwl:inputBinding" - doc: | - Describes how to handle the inputs of a process and convert them - into a concrete form for execution, such as command line parameters. - - - name: default - type: Any? - jsonldPredicate: "cwl:default" - doc: | - The default value for this parameter if not provided in the input - object. - - - name: type - type: - - "null" - - CWLType - - InputRecordSchema - - InputEnumSchema - - InputArraySchema - - string - - type: array - items: - - CWLType - - InputRecordSchema - - InputEnumSchema - - InputArraySchema - - string - jsonldPredicate: - "_id": "sld:type" - "_type": "@vocab" - refScope: 2 - typeDSL: True - doc: | - Specify valid types of data that may be assigned to this parameter. - -- name: OutputParameter - type: record - extends: Parameter - fields: - - name: id - type: string - jsonldPredicate: "@id" - doc: "The unique identifier for this parameter object." - - name: outputBinding - type: OutputBinding? - jsonldPredicate: "cwl:outputBinding" - doc: | - Describes how to handle the outputs of a process. - - -- type: record - name: ProcessRequirement - abstract: true - doc: | - A process requirement declares a prerequisite that may or must be fulfilled - before executing a process. See [`Process.hints`](#process) and - [`Process.requirements`](#process). - - Process requirements are the primary mechanism for specifying extensions to - the CWL core specification. - - -- type: record - name: Process - abstract: true - doc: | - - The base executable type in CWL is the `Process` object defined by the - document. Note that the `Process` object is abstract and cannot be - directly executed. - - fields: - - name: id - type: string? - jsonldPredicate: "@id" - doc: "The unique identifier for this process object." - - name: inputs - type: - type: array - items: InputParameter - jsonldPredicate: - _id: "cwl:inputs" - mapSubject: id - mapPredicate: type - doc: | - Defines the input parameters of the process. The process is ready to - run when all required input parameters are associated with concrete - values. Input parameters include a schema for each parameter which is - used to validate the input object. It may also be used to build a user - interface for constructing the input object. - - name: outputs - type: - type: array - items: OutputParameter - jsonldPredicate: - _id: "cwl:outputs" - mapSubject: id - mapPredicate: type - doc: | - Defines the parameters representing the output of the process. May be - used to generate and/or validate the output object. - - name: requirements - type: ProcessRequirement[]? - jsonldPredicate: - _id: "cwl:requirements" - mapSubject: class - doc: | - Declares requirements that apply to either the runtime environment or the - workflow engine that must be met in order to execute this process. If - an implementation cannot satisfy all requirements, or a requirement is - listed which is not recognized by the implementation, it is a fatal - error and the implementation must not attempt to run the process, - unless overridden at user option. - - name: hints - type: Any[]? - doc: | - Declares hints applying to either the runtime environment or the - workflow engine that may be helpful in executing this process. It is - not an error if an implementation cannot satisfy all hints, however - the implementation may report a warning. - jsonldPredicate: - _id: cwl:hints - noLinkCheck: true - mapSubject: class - - name: label - type: string? - jsonldPredicate: "rdfs:label" - doc: "A short, human-readable label of this process object." - - name: doc - type: string? - jsonldPredicate: "rdfs:comment" - doc: "A long, human-readable description of this process object." - - name: cwlVersion - type: CWLVersion? - doc: | - CWL document version. Always required at the document root. Not - required for a Process embedded inside another Process. - jsonldPredicate: - "_id": "cwl:cwlVersion" - "_type": "@vocab" - -- name: InlineJavascriptRequirement - type: record - extends: ProcessRequirement - doc: | - Indicates that the workflow platform must support inline Javascript expressions. - If this requirement is not present, the workflow platform must not perform expression - interpolatation. - fields: - - name: class - type: string - doc: "Always 'InlineJavascriptRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - - name: expressionLib - type: string[]? - doc: | - Additional code fragments that will also be inserted - before executing the expression code. Allows for function definitions that may - be called from CWL expressions. - - -- name: SchemaDefRequirement - type: record - extends: ProcessRequirement - doc: | - This field consists of an array of type definitions which must be used when - interpreting the `inputs` and `outputs` fields. When a `type` field - contain a IRI, the implementation must check if the type is defined in - `schemaDefs` and use that definition. If the type is not found in - `schemaDefs`, it is an error. The entries in `schemaDefs` must be - processed in the order listed such that later schema definitions may refer - to earlier schema definitions. - fields: - - name: class - type: string - doc: "Always 'SchemaDefRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - - name: types - type: - type: array - items: InputSchema - doc: The list of type definitions. diff --git a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/Workflow.yml b/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/Workflow.yml deleted file mode 100644 index 7e29a4f..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/Workflow.yml +++ /dev/null @@ -1,583 +0,0 @@ -$base: "https://w3id.org/cwl/cwl#" - -$namespaces: - sld: "https://w3id.org/cwl/salad#" - cwl: "https://w3id.org/cwl/cwl#" - -$graph: - -- name: "WorkflowDoc" - type: documentation - doc: - - | - # Common Workflow Language (CWL) Workflow Description, v1.0 - - This version: - * https://w3id.org/cwl/v1.0/ - - Current version: - * https://w3id.org/cwl/ - - "\n\n" - - {$include: contrib.md} - - "\n\n" - - | - # Abstract - - One way to define a workflow is: an analysis task represented by a - directed graph describing a sequence of operations that transform an - input data set to output. This specification defines the Common Workflow - Language (CWL) Workflow description, a vendor-neutral standard for - representing workflows intended to be portable across a variety of - computing platforms. - - - {$include: intro.md} - - - | - - ## Introduction to v1.0 - - This specification represents the first full release from the CWL group. - Since draft-3, this draft introduces the following changes and additions: - - * The `inputs` and `outputs` fields have been renamed `in` and `out`. - * Syntax simplifcations: denoted by the `map<>` syntax. Example: `in` - contains a list of items, each with an id. Now one can specify - a mapping of that identifier to the corresponding - `InputParameter`. - ``` - in: - - id: one - type: string - doc: First input parameter - - id: two - type: int - doc: Second input parameter - ``` - can be - ``` - in: - one: - type: string - doc: First input parameter - two: - type: int - doc: Second input parameter - ``` - * The common field `description` has been renamed to `doc`. - - ## Purpose - - The Common Workflow Language Command Line Tool Description express - workflows for data-intensive science, such as Bioinformatics, Chemistry, - Physics, and Astronomy. This specification is intended to define a data - and execution model for Workflows that can be implemented on top of a - variety of computing platforms, ranging from an individual workstation to - cluster, grid, cloud, and high performance computing systems. - - - {$include: concepts.md} - -- name: ExpressionToolOutputParameter - type: record - extends: OutputParameter - fields: - - name: type - type: - - "null" - - "#CWLType" - - "#OutputRecordSchema" - - "#OutputEnumSchema" - - "#OutputArraySchema" - - string - - type: array - items: - - "#CWLType" - - "#OutputRecordSchema" - - "#OutputEnumSchema" - - "#OutputArraySchema" - - string - jsonldPredicate: - "_id": "sld:type" - "_type": "@vocab" - refScope: 2 - typeDSL: True - doc: | - Specify valid types of data that may be assigned to this parameter. - -- type: record - name: ExpressionTool - extends: Process - specialize: - - specializeFrom: "#OutputParameter" - specializeTo: "#ExpressionToolOutputParameter" - documentRoot: true - doc: | - Execute an expression as a Workflow step. - fields: - - name: "class" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - type: string - - name: expression - type: [string, Expression] - doc: | - The expression to execute. The expression must return a JSON object which - matches the output parameters of the ExpressionTool. - -- name: LinkMergeMethod - type: enum - docParent: "#WorkflowStepInput" - doc: The input link merge method, described in [WorkflowStepInput](#WorkflowStepInput). - symbols: - - merge_nested - - merge_flattened - - -- name: WorkflowOutputParameter - type: record - extends: OutputParameter - docParent: "#Workflow" - doc: | - Describe an output parameter of a workflow. The parameter must be - connected to one or more parameters defined in the workflow that will - provide the value of the output parameter. - fields: - - name: outputSource - doc: | - Specifies one or more workflow parameters that supply the value of to - the output parameter. - jsonldPredicate: - "_id": "cwl:outputSource" - "_type": "@id" - refScope: 0 - type: - - string? - - string[]? - - name: linkMerge - type: ["null", "#LinkMergeMethod"] - jsonldPredicate: "cwl:linkMerge" - doc: | - The method to use to merge multiple sources into a single array. - If not specified, the default method is "merge_nested". - - name: type - type: - - "null" - - "#CWLType" - - "#OutputRecordSchema" - - "#OutputEnumSchema" - - "#OutputArraySchema" - - string - - type: array - items: - - "#CWLType" - - "#OutputRecordSchema" - - "#OutputEnumSchema" - - "#OutputArraySchema" - - string - jsonldPredicate: - "_id": "sld:type" - "_type": "@vocab" - refScope: 2 - typeDSL: True - doc: | - Specify valid types of data that may be assigned to this parameter. - - -- name: Sink - type: record - abstract: true - fields: - - name: source - doc: | - Specifies one or more workflow parameters that will provide input to - the underlying step parameter. - jsonldPredicate: - "_id": "cwl:source" - "_type": "@id" - refScope: 2 - type: - - string? - - string[]? - - name: linkMerge - type: LinkMergeMethod? - jsonldPredicate: "cwl:linkMerge" - doc: | - The method to use to merge multiple inbound links into a single array. - If not specified, the default method is "merge_nested". - - -- type: record - name: WorkflowStepInput - extends: Sink - docParent: "#WorkflowStep" - doc: | - The input of a workflow step connects an upstream parameter (from the - workflow inputs, or the outputs of other workflows steps) with the input - parameters of the underlying step. - - ## Input object - - A WorkflowStepInput object must contain an `id` field in the form - `#fieldname` or `#stepname.fieldname`. When the `id` field contains a - period `.` the field name consists of the characters following the final - period. This defines a field of the workflow step input object with the - value of the `source` parameter(s). - - ## Merging - - To merge multiple inbound data links, - [MultipleInputFeatureRequirement](#MultipleInputFeatureRequirement) must be specified - in the workflow or workflow step requirements. - - If the sink parameter is an array, or named in a [workflow - scatter](#WorkflowStep) operation, there may be multiple inbound data links - listed in the `source` field. The values from the input links are merged - depending on the method specified in the `linkMerge` field. If not - specified, the default method is "merge_nested". - - * **merge_nested** - - The input must be an array consisting of exactly one entry for each - input link. If "merge_nested" is specified with a single link, the value - from the link must be wrapped in a single-item list. - - * **merge_flattened** - - 1. The source and sink parameters must be compatible types, or the source - type must be compatible with single element from the "items" type of - the destination array parameter. - 2. Source parameters which are arrays are concatenated. - Source parameters which are single element types are appended as - single elements. - - fields: - - name: id - type: string - jsonldPredicate: "@id" - doc: "A unique identifier for this workflow input parameter." - - name: default - type: ["null", Any] - doc: | - The default value for this parameter if there is no `source` - field. - jsonldPredicate: "cwl:default" - - name: valueFrom - type: - - "null" - - "string" - - "#Expression" - jsonldPredicate: "cwl:valueFrom" - doc: | - To use valueFrom, [StepInputExpressionRequirement](#StepInputExpressionRequirement) must - be specified in the workflow or workflow step requirements. - - If `valueFrom` is a constant string value, use this as the value for - this input parameter. - - If `valueFrom` is a parameter reference or expression, it must be - evaluated to yield the actual value to be assigned to the input field. - - The `self` value of in the parameter reference or expression must be - the value of the parameter(s) specified in the `source` field, or - null if there is no `source` field. - - The value of `inputs` in the parameter reference or expression must be - the input object to the workflow step after assigning the `source` - values and then scattering. The order of evaluating `valueFrom` among - step input parameters is undefined and the result of evaluating - `valueFrom` on a parameter must not be visible to evaluation of - `valueFrom` on other parameters. - - -- type: record - name: WorkflowStepOutput - docParent: "#WorkflowStep" - doc: | - Associate an output parameter of the underlying process with a workflow - parameter. The workflow parameter (given in the `id` field) be may be used - as a `source` to connect with input parameters of other workflow steps, or - with an output parameter of the process. - fields: - - name: id - type: string - jsonldPredicate: "@id" - doc: | - A unique identifier for this workflow output parameter. This is the - identifier to use in the `source` field of `WorkflowStepInput` to - connect the output value to downstream parameters. - - -- name: ScatterMethod - type: enum - docParent: "#WorkflowStep" - doc: The scatter method, as described in [workflow step scatter](#WorkflowStep). - symbols: - - dotproduct - - nested_crossproduct - - flat_crossproduct - - -- name: WorkflowStep - type: record - docParent: "#Workflow" - doc: | - A workflow step is an executable element of a workflow. It specifies the - underlying process implementation (such as `CommandLineTool` or another - `Workflow`) in the `run` field and connects the input and output parameters - of the underlying process to workflow parameters. - - # Scatter/gather - - To use scatter/gather, - [ScatterFeatureRequirement](#ScatterFeatureRequirement) must be specified - in the workflow or workflow step requirements. - - A "scatter" operation specifies that the associated workflow step or - subworkflow should execute separately over a list of input elements. Each - job making up a scatter operation is independent and may be executed - concurrently. - - The `scatter` field specifies one or more input parameters which will be - scattered. An input parameter may be listed more than once. The declared - type of each input parameter is implicitly wrapped in an array for each - time it appears in the `scatter` field. As a result, upstream parameters - which are connected to scattered parameters may be arrays. - - All output parameter types are also implicitly wrapped in arrays. Each job - in the scatter results in an entry in the output array. - - If `scatter` declares more than one input parameter, `scatterMethod` - describes how to decompose the input into a discrete set of jobs. - - * **dotproduct** specifies that each of the input arrays are aligned and one - element taken from each array to construct each job. It is an error - if all input arrays are not the same length. - - * **nested_crossproduct** specifies the Cartesian product of the inputs, - producing a job for every combination of the scattered inputs. The - output must be nested arrays for each level of scattering, in the - order that the input arrays are listed in the `scatter` field. - - * **flat_crossproduct** specifies the Cartesian product of the inputs, - producing a job for every combination of the scattered inputs. The - output arrays must be flattened to a single level, but otherwise listed in the - order that the input arrays are listed in the `scatter` field. - - # Subworkflows - - To specify a nested workflow as part of a workflow step, - [SubworkflowFeatureRequirement](#SubworkflowFeatureRequirement) must be - specified in the workflow or workflow step requirements. - - fields: - - name: id - type: string - jsonldPredicate: "@id" - doc: "The unique identifier for this workflow step." - - name: in - type: WorkflowStepInput[] - jsonldPredicate: - _id: "cwl:in" - mapSubject: id - mapPredicate: source - doc: | - Defines the input parameters of the workflow step. The process is ready to - run when all required input parameters are associated with concrete - values. Input parameters include a schema for each parameter which is - used to validate the input object. It may also be used build a user - interface for constructing the input object. - - name: out - type: - - type: array - items: [string, WorkflowStepOutput] - jsonldPredicate: - _id: "cwl:out" - _type: "@id" - identity: true - doc: | - Defines the parameters representing the output of the process. May be - used to generate and/or validate the output object. - - name: requirements - type: ProcessRequirement[]? - jsonldPredicate: - _id: "cwl:requirements" - mapSubject: class - doc: | - Declares requirements that apply to either the runtime environment or the - workflow engine that must be met in order to execute this workflow step. If - an implementation cannot satisfy all requirements, or a requirement is - listed which is not recognized by the implementation, it is a fatal - error and the implementation must not attempt to run the process, - unless overridden at user option. - - name: hints - type: Any[]? - jsonldPredicate: - _id: "cwl:hints" - noLinkCheck: true - mapSubject: class - doc: | - Declares hints applying to either the runtime environment or the - workflow engine that may be helpful in executing this workflow step. It is - not an error if an implementation cannot satisfy all hints, however - the implementation may report a warning. - - name: label - type: string? - jsonldPredicate: "rdfs:label" - doc: "A short, human-readable label of this process object." - - name: doc - type: string? - jsonldPredicate: "rdfs:comment" - doc: "A long, human-readable description of this process object." - - name: run - type: [string, Process] - jsonldPredicate: - "_id": "cwl:run" - "_type": "@id" - doc: | - Specifies the process to run. - - name: scatter - type: - - string? - - string[]? - jsonldPredicate: - "_id": "cwl:scatter" - "_type": "@id" - "_container": "@list" - refScope: 0 - - name: scatterMethod - doc: | - Required if `scatter` is an array of more than one element. - type: ScatterMethod? - jsonldPredicate: - "_id": "cwl:scatterMethod" - "_type": "@vocab" - - -- name: Workflow - type: record - extends: "#Process" - documentRoot: true - specialize: - - specializeFrom: "#OutputParameter" - specializeTo: "#WorkflowOutputParameter" - doc: | - A workflow describes a set of **steps** and the **dependencies** between - those steps. When a step produces output that will be consumed by a - second step, the first step is a dependency of the second step. - - When there is a dependency, the workflow engine must execute the preceding - step and wait for it to successfully produce output before executing the - dependent step. If two steps are defined in the workflow graph that - are not directly or indirectly dependent, these steps are **independent**, - and may execute in any order or execute concurrently. A workflow is - complete when all steps have been executed. - - Dependencies between parameters are expressed using the `source` field on - [workflow step input parameters](#WorkflowStepInput) and [workflow output - parameters](#WorkflowOutputParameter). - - The `source` field expresses the dependency of one parameter on another - such that when a value is associated with the parameter specified by - `source`, that value is propagated to the destination parameter. When all - data links inbound to a given step are fulfilled, the step is ready to - execute. - - ## Workflow success and failure - - A completed step must result in one of `success`, `temporaryFailure` or - `permanentFailure` states. An implementation may choose to retry a step - execution which resulted in `temporaryFailure`. An implementation may - choose to either continue running other steps of a workflow, or terminate - immediately upon `permanentFailure`. - - * If any step of a workflow execution results in `permanentFailure`, then - the workflow status is `permanentFailure`. - - * If one or more steps result in `temporaryFailure` and all other steps - complete `success` or are not executed, then the workflow status is - `temporaryFailure`. - - * If all workflow steps are executed and complete with `success`, then the - workflow status is `success`. - - # Extensions - - [ScatterFeatureRequirement](#ScatterFeatureRequirement) and - [SubworkflowFeatureRequirement](#SubworkflowFeatureRequirement) are - available as standard [extensions](#Extensions_and_Metadata) to core - workflow semantics. - - fields: - - name: "class" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - type: string - - name: steps - doc: | - The individual steps that make up the workflow. Each step is executed when all of its - input data links are fulfilled. An implementation may choose to execute - the steps in a different order than listed and/or execute steps - concurrently, provided that dependencies between steps are met. - type: - - type: array - items: "#WorkflowStep" - jsonldPredicate: - mapSubject: id - - -- type: record - name: SubworkflowFeatureRequirement - extends: ProcessRequirement - doc: | - Indicates that the workflow platform must support nested workflows in - the `run` field of [WorkflowStep](#WorkflowStep). - fields: - - name: "class" - type: "string" - doc: "Always 'SubworkflowFeatureRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - -- name: ScatterFeatureRequirement - type: record - extends: ProcessRequirement - doc: | - Indicates that the workflow platform must support the `scatter` and - `scatterMethod` fields of [WorkflowStep](#WorkflowStep). - fields: - - name: "class" - type: "string" - doc: "Always 'ScatterFeatureRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - -- name: MultipleInputFeatureRequirement - type: record - extends: ProcessRequirement - doc: | - Indicates that the workflow platform must support multiple inbound data links - listed in the `source` field of [WorkflowStepInput](#WorkflowStepInput). - fields: - - name: "class" - type: "string" - doc: "Always 'MultipleInputFeatureRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" - -- type: record - name: StepInputExpressionRequirement - extends: ProcessRequirement - doc: | - Indicate that the workflow platform must support the `valueFrom` field - of [WorkflowStepInput](#WorkflowStepInput). - fields: - - name: "class" - type: "string" - doc: "Always 'StepInputExpressionRequirement'" - jsonldPredicate: - "_id": "@type" - "_type": "@vocab" diff --git a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/concepts.md b/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/concepts.md deleted file mode 100644 index 8b13789..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/concepts.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/contrib.md b/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/contrib.md deleted file mode 100644 index 8b13789..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/contrib.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/intro.md b/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/intro.md deleted file mode 100644 index 8b13789..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/intro.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/invocation.md b/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/invocation.md deleted file mode 100644 index 8b13789..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/invocation.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/metaschema_base.yml b/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/metaschema_base.yml deleted file mode 100644 index 73511d1..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/cwl/schema/metaschema_base.yml +++ /dev/null @@ -1,164 +0,0 @@ -$base: "https://w3id.org/cwl/salad#" - -$namespaces: - sld: "https://w3id.org/cwl/salad#" - dct: "http://purl.org/dc/terms/" - rdf: "http://www.w3.org/1999/02/22-rdf-syntax-ns#" - rdfs: "http://www.w3.org/2000/01/rdf-schema#" - xsd: "http://www.w3.org/2001/XMLSchema#" - -$graph: -- name: PrimitiveType - type: enum - symbols: - - "sld:null" - - "xsd:boolean" - - "xsd:int" - - "xsd:long" - - "xsd:float" - - "xsd:double" - - "xsd:string" - doc: - - | - Salad data types are based on Avro schema declarations. Refer to the - [Avro schema declaration documentation](https://avro.apache.org/docs/current/spec.html#schemas) for - detailed information. - - "null: no value" - - "boolean: a binary value" - - "int: 32-bit signed integer" - - "long: 64-bit signed integer" - - "float: single precision (32-bit) IEEE 754 floating-point number" - - "double: double precision (64-bit) IEEE 754 floating-point number" - - "string: Unicode character sequence" - - -- name: Any - type: enum - symbols: ["#Any"] - doc: | - The **Any** type validates for any non-null value. - - -- name: RecordField - type: record - doc: A field of a record. - fields: - - name: name - type: string - jsonldPredicate: "@id" - doc: | - The name of the field - - - name: doc - type: string? - doc: | - A documentation string for this field - jsonldPredicate: "rdfs:comment" - - - name: type - type: - - PrimitiveType - - RecordSchema - - EnumSchema - - ArraySchema - - string - - type: array - items: - - PrimitiveType - - RecordSchema - - EnumSchema - - ArraySchema - - string - jsonldPredicate: - _id: sld:type - _type: "@vocab" - typeDSL: true - refScope: 2 - doc: | - The field type - - -- name: RecordSchema - type: record - fields: - type: - doc: "Must be `record`" - type: - name: Record_symbol - type: enum - symbols: - - "sld:record" - jsonldPredicate: - _id: "sld:type" - _type: "@vocab" - typeDSL: true - refScope: 2 - fields: - type: RecordField[]? - jsonldPredicate: - _id: sld:fields - mapSubject: name - mapPredicate: type - doc: "Defines the fields of the record." - - -- name: EnumSchema - type: record - doc: | - Define an enumerated type. - fields: - type: - doc: "Must be `enum`" - type: - name: Enum_symbol - type: enum - symbols: - - "sld:enum" - jsonldPredicate: - _id: "sld:type" - _type: "@vocab" - typeDSL: true - refScope: 2 - symbols: - type: string[] - jsonldPredicate: - _id: "sld:symbols" - _type: "@id" - identity: true - doc: "Defines the set of valid symbols." - - -- name: ArraySchema - type: record - fields: - type: - doc: "Must be `array`" - type: - name: Array_symbol - type: enum - symbols: - - "sld:array" - jsonldPredicate: - _id: "sld:type" - _type: "@vocab" - typeDSL: true - refScope: 2 - items: - type: - - PrimitiveType - - RecordSchema - - EnumSchema - - ArraySchema - - string - - type: array - items: - - PrimitiveType - - RecordSchema - - EnumSchema - - ArraySchema - - string - jsonldPredicate: - _id: "sld:items" - _type: "@vocab" - refScope: 2 - doc: "Defines the type of the array elements." diff --git a/emacs.d/vendor/flycheck/test/resources/language/d/lib/external_library.d b/emacs.d/vendor/flycheck/test/resources/language/d/lib/external_library.d deleted file mode 100644 index 6c35319..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/d/lib/external_library.d +++ /dev/null @@ -1 +0,0 @@ -module external_library; diff --git a/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/continuation.d b/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/continuation.d deleted file mode 100644 index 5329b7e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/continuation.d +++ /dev/null @@ -1,13 +0,0 @@ -// Test continuation lines for template instantiations - -template T() -{ - alias T = invalid; -} - -template U() -{ - alias U = T!(); -} - -U!() u; diff --git a/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/library.d b/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/library.d deleted file mode 100644 index 761cfde..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/library.d +++ /dev/null @@ -1,3 +0,0 @@ -module dmd.library; - -// A in-source library, to test the implicit inclusion of the base directory. diff --git a/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/no_module.d b/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/no_module.d deleted file mode 100644 index e719d73..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/no_module.d +++ /dev/null @@ -1 +0,0 @@ -import std.stdio; diff --git a/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/package.d b/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/package.d deleted file mode 100644 index 2ebb3c3..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/package.d +++ /dev/null @@ -1,3 +0,0 @@ -// A dummy D package file to test base calculation - -module dmd; diff --git a/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/warning.d b/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/warning.d deleted file mode 100644 index a59a2e4..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/d/src/dmd/warning.d +++ /dev/null @@ -1,21 +0,0 @@ -module dmd.warning; - -import dmd.library; -import external_library; - -auto foo(int a) -{ - return a; - return a; -} - -deprecated -auto bar(int a) -{ - return a; -} - -void main() -{ - auto x = bar(1); -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/dockerfile/Dockerfile.error b/emacs.d/vendor/flycheck/test/resources/language/dockerfile/Dockerfile.error deleted file mode 100644 index adb7633..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/dockerfile/Dockerfile.error +++ /dev/null @@ -1,2 +0,0 @@ -FROM debian -INVALID_COMMAND diff --git a/emacs.d/vendor/flycheck/test/resources/language/dockerfile/Dockerfile.warning b/emacs.d/vendor/flycheck/test/resources/language/dockerfile/Dockerfile.warning deleted file mode 100644 index b518252..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/dockerfile/Dockerfile.warning +++ /dev/null @@ -1,3 +0,0 @@ -FROM debian -RUN apt-get update && apt-get upgrade -WORKDIR usr/src/app diff --git a/emacs.d/vendor/flycheck/test/resources/language/elixir/lib/infos.ex b/emacs.d/vendor/flycheck/test/resources/language/elixir/lib/infos.ex deleted file mode 100644 index 20b2261..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/elixir/lib/infos.ex +++ /dev/null @@ -1,5 +0,0 @@ -defmodule Infos do - def give_infos() do - IO.puts "Hello World" - end -end diff --git a/emacs.d/vendor/flycheck/test/resources/language/elixir/lib/warnings.ex b/emacs.d/vendor/flycheck/test/resources/language/elixir/lib/warnings.ex deleted file mode 100644 index 176d502..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/elixir/lib/warnings.ex +++ /dev/null @@ -1,11 +0,0 @@ -defmodule Warnings do - @moduledoc "Removes info warning" - - def give_warnings do - if true && true do - end - - if length(list) == 0 do - end - end -end diff --git a/emacs.d/vendor/flycheck/test/resources/language/elixir/mix.exs b/emacs.d/vendor/flycheck/test/resources/language/elixir/mix.exs deleted file mode 100644 index c58c75b..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/elixir/mix.exs +++ /dev/null @@ -1,13 +0,0 @@ -defmodule FlycheckTests.Mixfile do - use Mix.Project - - def project do - [app: :flycheck_tests, - version: "0.0.1", - deps: deps()] - end - - def deps do - [{:credo, "~> 0.9.2"}] - end -end diff --git a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/check-declare-warnings.el b/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/check-declare-warnings.el deleted file mode 100644 index f090e16..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/check-declare-warnings.el +++ /dev/null @@ -1,12 +0,0 @@ -;;; check-declare-warnings.el -- check-declare warnings -*- lexical-binding: t; -*- - -;;; Commentary: - -;; Test check-declare warnings - -;;; Code: - -(declare-function this-function-is-not-declared "this-file-does-not-exist.el") - -(provide 'check-declare-warnings) -;;; check-declare-warnings.el ends here diff --git a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/checkdoc-elisp-mode-regression.el b/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/checkdoc-elisp-mode-regression.el deleted file mode 100644 index bfb930d..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/checkdoc-elisp-mode-regression.el +++ /dev/null @@ -1,18 +0,0 @@ -;;; checkdoc-elisp-mode-regression.el -- This file will confuse an improperly configured checkdoc -*- lexical-binding: t; -*- - -;;; Commentary: - -;; Checkdoc uses the syntax table and comment syntax of the current buffer; if -;; not set properly, it gets confused by the code below. - -;;; Code: - -(defun confusing-syntax () - ?{) - -(defconst confusing-docstring - ;; comment "a" - ".") - -(provide 'checkdoc-elisp-mode-regression) -;;; checkdoc-elisp-mode-regression.el ends here diff --git a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/errors-and-warnings.el b/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/errors-and-warnings.el deleted file mode 100644 index ff5afb7..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/errors-and-warnings.el +++ /dev/null @@ -1,22 +0,0 @@ -;;; errors-and-warnings.el -- Trigger Emacs Lisp warnings -*- lexical-binding: t; -*- - -;;; Commentary: - -;; Trigger a checkdoc warning by omitting a period in the docstring of a -;; function. All these comments are to make checkdoc happy, which also checks -;; the general commenting style of an Emacs Lisp file. - -;;; Code: - -(defun foobar () - "Does nothing really useful" - (dummy-package-foo)) - -(require 'dummy-package) - -(if t - (message) - (message "Hello foo")) - -(provide 'errors-and-warnings) -;;; errors-and-warnings.el ends here diff --git a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/local-checkdoc-variables.el b/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/local-checkdoc-variables.el deleted file mode 100644 index 21ffe3c..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/local-checkdoc-variables.el +++ /dev/null @@ -1,25 +0,0 @@ -;;; local-checkdoc-variables.el -- Silence checkdoc warnings with file-local variables -*- lexical-binding: t; -*- - -;;; Commentary: - -;; Make sure that file-local checkdoc settings are properly propagated to -;; checkdoc process. There's only a single space between these sentences, but we -;; allow that in this file. - -;;; Code: - -(defun imperative-mood () - "Uses an imperative mood, which is wrong.") - -(defun arguments-in-wrong-order (a b) - "Sum B and A." - (+ a b)) - -;; Local Variables: -;; checkdoc-arguments-in-order-flag: nil -;; checkdoc-verb-check-experimental-flag: nil -;; sentence-end-double-space: nil -;; End: - -(provide 'local-checkdoc-variables) -;;; local-checkdoc-variables.el ends here diff --git a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/syntax-error.el b/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/syntax-error.el deleted file mode 100644 index 27230d9..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/syntax-error.el +++ /dev/null @@ -1,3 +0,0 @@ -;; A syntax error caused by a missing parenthesis -*- lexical-binding: t; -*- - -(message (concat "Hello " user-full-name) diff --git a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/warnings.el b/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/warnings.el deleted file mode 100644 index 8876838..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/warnings.el +++ /dev/null @@ -1,20 +0,0 @@ -;;; warnings.el -- Trigger Emacs Lisp warnings -*- lexical-binding: t; -*- - -;;; Commentary: - -;; Trigger a checkdoc warning by omitting a period in the docstring of a -;; function. All these comments are to make checkdoc happy, which also checks -;; the general commenting style of an Emacs Lisp file. - -;;; Code: - -(defun foobar () - "Does nothing really useful" - (dummy-package-foo)) - -(if t - (foobar 1) - (message "Hello foo")) - -(provide 'warnings) -;;; warnings.el ends here diff --git a/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/warnings.el.gz b/emacs.d/vendor/flycheck/test/resources/language/emacs-lisp/warnings.el.gz deleted file mode 100644 index 5c97595f1570951d5fbf8585b8a35dd03dc07a47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmV-A0mc3wiwFq&iGW%F19xF^ZfS03b1r3U08Nq2PQx$|gztHZQ7$A1SK`{75Fl~j z$O~-kO=8tQk=Lcot1MAyZoSb#Q|b^vwEbqTXOQtcc#`T;GI+lZ^&8AkU2A zlbos&M^FWgr=YWqVF$c8S53mu*E9hoMvm}wiCiw?)#6{@op< - - diff --git a/emacs.d/vendor/flycheck/test/resources/language/ember-template-lint/ember-template-lint/warning.hbs b/emacs.d/vendor/flycheck/test/resources/language/ember-template-lint/ember-template-lint/warning.hbs deleted file mode 100644 index 19355d5..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/ember-template-lint/ember-template-lint/warning.hbs +++ /dev/null @@ -1 +0,0 @@ -This file only emits a warning because it has been marked as "pending" in the configuration file. diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/erlang/error.erl b/emacs.d/vendor/flycheck/test/resources/language/erlang/erlang/error.erl deleted file mode 100644 index 68abc10..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/erlang/error.erl +++ /dev/null @@ -1,8 +0,0 @@ -%% Test an error from Erlang --module('erlang-error'). --compile(export_all). - -great_func() -> - io:format("Flycheck is great!"); -error_func() -> - 'head-mismatch'. diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/erlang/warning.erl b/emacs.d/vendor/flycheck/test/resources/language/erlang/erlang/warning.erl deleted file mode 100644 index 03694c0..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/erlang/warning.erl +++ /dev/null @@ -1,6 +0,0 @@ -%% Warning from Erlang --module('erlang-warning'). --compile(export_all). - -simple_warning() -> - io:format("Flycheck is great!", ["unused argument"]). diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/.gitignore b/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/.gitignore deleted file mode 100644 index 7d36e8f..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -_build -rebar.lock diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/.gitignore b/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/.gitignore deleted file mode 100644 index 299a316..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -_* -ebin -.rebar3 -rebar.lock diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/rebar.config b/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/rebar.config deleted file mode 100644 index a411c06..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/rebar.config +++ /dev/null @@ -1,5 +0,0 @@ -{erl_opts, - [ - return_warnings - ]}. -{deps, []}. \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/src/dependency.app.src b/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/src/dependency.app.src deleted file mode 100644 index d698cc7..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/src/dependency.app.src +++ /dev/null @@ -1,15 +0,0 @@ -{application, 'dependency', - [{description, "An OTP library"}, - {vsn, "0.1.0"}, - {registered, []}, - {applications, - [kernel, - stdlib - ]}, - {env,[]}, - {modules, []}, - - {maintainers, []}, - {licenses, []}, - {links, []} - ]}. diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/src/dependency.erl b/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/src/dependency.erl deleted file mode 100644 index 5508175..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/_checkouts/dependency/src/dependency.erl +++ /dev/null @@ -1,4 +0,0 @@ --module('dependency'). - -%% API exports --export([]). diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/rebar.config b/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/rebar.config deleted file mode 100644 index 366d742..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/rebar.config +++ /dev/null @@ -1,5 +0,0 @@ -{erl_opts, - [ - return_warnings - ]}. -{deps, [dependency]}. diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-error.erl b/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-error.erl deleted file mode 100644 index 68abc10..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-error.erl +++ /dev/null @@ -1,8 +0,0 @@ -%% Test an error from Erlang --module('erlang-error'). --compile(export_all). - -great_func() -> - io:format("Flycheck is great!"); -error_func() -> - 'head-mismatch'. diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-rebar3.app.src b/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-rebar3.app.src deleted file mode 100644 index 89d359f..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-rebar3.app.src +++ /dev/null @@ -1,15 +0,0 @@ -{application, 'erlang-rebar3', - [{description, "An OTP library"}, - {vsn, "0.1.0"}, - {registered, []}, - {applications, - [kernel, - stdlib - ]}, - {env,[]}, - {modules, []}, - - {maintainers, []}, - {licenses, []}, - {links, []} - ]}. diff --git a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-rebar3.erl b/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-rebar3.erl deleted file mode 100644 index 18a3f31..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/erlang/rebar3/src/erlang-rebar3.erl +++ /dev/null @@ -1,13 +0,0 @@ --module('erlang-rebar3'). - -%% API exports --export([]). - -%%==================================================================== -%% API functions -%%==================================================================== - - -%%==================================================================== -%% Internal functions -%%==================================================================== diff --git a/emacs.d/vendor/flycheck/test/resources/language/eruby.erb b/emacs.d/vendor/flycheck/test/resources/language/eruby.erb deleted file mode 100644 index a519b7e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/eruby.erb +++ /dev/null @@ -1,7 +0,0 @@ - - - <%- (1..9).each do |y| -%> - - <%- err -%> - -
<%= y %>
diff --git a/emacs.d/vendor/flycheck/test/resources/language/fortran/error.f b/emacs.d/vendor/flycheck/test/resources/language/fortran/error.f deleted file mode 100644 index 8c6d13a..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/fortran/error.f +++ /dev/null @@ -1,3 +0,0 @@ -program hello -print *, "hello world!" -end_ program hello diff --git a/emacs.d/vendor/flycheck/test/resources/language/fortran/warning.f90 b/emacs.d/vendor/flycheck/test/resources/language/fortran/warning.f90 deleted file mode 100644 index ba9b2dc..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/fortran/warning.f90 +++ /dev/null @@ -1,20 +0,0 @@ -function foo(dist, p) result(value) - integer :: value - integer, intent(in) :: dist - integer, intent(in) :: p - - value = dist+value -end function foo - -program hello -interface - subroutine bar(a,b) - integer, intent(in) :: a - integer, intent(out) :: b - end subroutine bar -end interface -integer :: a - -call bar(a,a) - -end program hello diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/b1/main.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/b1/main.go deleted file mode 100644 index fb03231..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/b1/main.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -import ( - "b2" - "fmt" -) - -func main() { - fmt.Println("from b1 I'm calling", b2.Call()) -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/b2/b2.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/b2/b2.go deleted file mode 100644 index e136f85..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/b2/b2.go +++ /dev/null @@ -1,5 +0,0 @@ -package b2 - -func Call() string { - return "b2" -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/errcheck/errcheck.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/errcheck/errcheck.go deleted file mode 100644 index b940733..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/errcheck/errcheck.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -import "os" - -func main() { - f, _ := os.Open("enoent") - f.Close() - - os.Stat("enoent") -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/megacheck/megacheck1.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/megacheck/megacheck1.go deleted file mode 100644 index c9bdf65..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/megacheck/megacheck1.go +++ /dev/null @@ -1,16 +0,0 @@ -package main - -import "strings" - -func main() { - // S1005 (gosimple) - // xs is declared in a different file to ensure that test fails if megacheck is called incorrectly - for _ = range xs { - } - - // SA1018 (staticcheck) - _ = strings.Replace("foo", "f", "b", 0) -} - -// U1000 (unused) -func unused() {} diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/megacheck/megacheck2.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/megacheck/megacheck2.go deleted file mode 100644 index 891bd59..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/megacheck/megacheck2.go +++ /dev/null @@ -1,3 +0,0 @@ -package main - -var xs = []int{1, 2, 3} diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/staticcheck/staticcheck1.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/staticcheck/staticcheck1.go deleted file mode 100644 index c9bdf65..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/staticcheck/staticcheck1.go +++ /dev/null @@ -1,16 +0,0 @@ -package main - -import "strings" - -func main() { - // S1005 (gosimple) - // xs is declared in a different file to ensure that test fails if megacheck is called incorrectly - for _ = range xs { - } - - // SA1018 (staticcheck) - _ = strings.Replace("foo", "f", "b", 0) -} - -// U1000 (unused) -func unused() {} diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/staticcheck/staticcheck2.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/staticcheck/staticcheck2.go deleted file mode 100644 index 891bd59..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/staticcheck/staticcheck2.go +++ /dev/null @@ -1,3 +0,0 @@ -package main - -var xs = []int{1, 2, 3} diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/syntax/syntax-error.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/syntax/syntax-error.go deleted file mode 100644 index 4967568..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/syntax/syntax-error.go +++ /dev/null @@ -1,6 +0,0 @@ -// A simple syntax error in Go - -package main - -func ta ta() { -} \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/test/test-error_test.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/test/test-error_test.go deleted file mode 100644 index a480214..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/test/test-error_test.go +++ /dev/null @@ -1,9 +0,0 @@ -// A simple import error in Go test file - -package main - -import "testing" - -func TestFoo(t *testing.T) { - fmt.Println("foo") -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/unconvert/unconvert.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/unconvert/unconvert.go deleted file mode 100644 index 0482054..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/unconvert/unconvert.go +++ /dev/null @@ -1,8 +0,0 @@ -package main - -import "fmt" - -func main() { - var x int - fmt.Println(int(x)) -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/go/src/warnings.go b/emacs.d/vendor/flycheck/test/resources/language/go/src/warnings.go deleted file mode 100644 index 9a9e546..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/go/src/warnings.go +++ /dev/null @@ -1,28 +0,0 @@ -package testpackage - -import ( - . "fmt" -) - -func Warn(a ...interface{}) { - fmt.Printf(a...) -} - -func Warnf(prefix string, format string, a ...interface{}) { - fmt.Printf(format, a...) -} - - -func foo() { - fmt.Printf("%s", 1) - Warn("%s") - Warnf("d", 1) - - return - - if true { - return - } else { - return - } -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/groovy.groovy b/emacs.d/vendor/flycheck/test/resources/language/groovy.groovy deleted file mode 100644 index 9660220..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/groovy.groovy +++ /dev/null @@ -1,3 +0,0 @@ -class Foo { - def foo( {} -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/haml/haml-error.haml b/emacs.d/vendor/flycheck/test/resources/language/haml/haml-error.haml deleted file mode 100644 index 1faf6cf..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haml/haml-error.haml +++ /dev/null @@ -1,5 +0,0 @@ --# A syntax error caused by inconsistent indentation - -%html - %head - %title Bad indent! diff --git a/emacs.d/vendor/flycheck/test/resources/language/haml/ruby-error.haml b/emacs.d/vendor/flycheck/test/resources/language/haml/ruby-error.haml deleted file mode 100644 index 181e23c..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haml/ruby-error.haml +++ /dev/null @@ -1 +0,0 @@ -- foo.each do diff --git a/emacs.d/vendor/flycheck/test/resources/language/handlebars.hbs b/emacs.d/vendor/flycheck/test/resources/language/handlebars.hbs deleted file mode 100644 index e3fb8ed..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/handlebars.hbs +++ /dev/null @@ -1,3 +0,0 @@ -

- {{! This comment will not be in the output } -
diff --git a/emacs.d/vendor/flycheck/test/resources/language/haskell/.gitignore b/emacs.d/vendor/flycheck/test/resources/language/haskell/.gitignore deleted file mode 100644 index 8ee1bf9..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haskell/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.stack-work diff --git a/emacs.d/vendor/flycheck/test/resources/language/haskell/Error.hs b/emacs.d/vendor/flycheck/test/resources/language/haskell/Error.hs deleted file mode 100644 index 9e54a2c..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haskell/Error.hs +++ /dev/null @@ -1,4 +0,0 @@ -module Haskell.Error where - -foo :: IO () -foo = putStrLn True diff --git a/emacs.d/vendor/flycheck/test/resources/language/haskell/Literate.lhs b/emacs.d/vendor/flycheck/test/resources/language/haskell/Literate.lhs deleted file mode 100644 index 4626bf4..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haskell/Literate.lhs +++ /dev/null @@ -1,7 +0,0 @@ -Literate Haskell test. - -\begin{code} -module Literate (foo) where - -foo = undefined -\end{code} diff --git a/emacs.d/vendor/flycheck/test/resources/language/haskell/SyntaxError.hs b/emacs.d/vendor/flycheck/test/resources/language/haskell/SyntaxError.hs deleted file mode 100644 index 56d2ec6..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haskell/SyntaxError.hs +++ /dev/null @@ -1,3 +0,0 @@ -bogus - -module Haskell.SyntaxError where diff --git a/emacs.d/vendor/flycheck/test/resources/language/haskell/Warnings.hs b/emacs.d/vendor/flycheck/test/resources/language/haskell/Warnings.hs deleted file mode 100644 index a2dd377..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haskell/Warnings.hs +++ /dev/null @@ -1,7 +0,0 @@ -module Haskell.Warnings (spam, main) -where - -spam eggs = map lines eggs - -main :: IO () -main = (putStrLn "hello world") diff --git a/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/src/Foo.hs b/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/src/Foo.hs deleted file mode 100644 index c6e9d7d..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/src/Foo.hs +++ /dev/null @@ -1,5 +0,0 @@ -module Foo (foo) where - -foo :: a -> a -foo x = x - diff --git a/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack-nonstandard.yaml b/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack-nonstandard.yaml deleted file mode 100644 index b3d4909..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack-nonstandard.yaml +++ /dev/null @@ -1,4 +0,0 @@ -resolver: lts-9.0 - -packages: - - "." diff --git a/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack-project-with-renamed-stack-yaml.cabal b/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack-project-with-renamed-stack-yaml.cabal deleted file mode 100644 index 2177758..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack-project-with-renamed-stack-yaml.cabal +++ /dev/null @@ -1,34 +0,0 @@ --- Created : 24 October 2017 - -name: - stack-project-with-renamed-stack-yaml -version: - 0.1.0.0 -license: - BSD3 - -cabal-version: - >= 1.16 -build-type: - Simple - -library - exposed-modules: - Foo - hs-source-dirs: - src - build-depends: - base >= 4.4 - default-language: - Haskell2010 - ghc-options: - -Wall - -fwarn-name-shadowing - -Wincomplete-uni-patterns - -Wincomplete-record-updates - -fno-warn-type-defaults - if impl(ghc >= 8.0) - ghc-options: - -Wcompat - ghc-prof-options: - -fprof-auto diff --git a/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack.yaml b/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack.yaml deleted file mode 100644 index e0b6a7c..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/haskell/stack-project-with-renamed-stack-yaml/stack.yaml +++ /dev/null @@ -1,4 +0,0 @@ -resolver: invalid-resolver - -packages: -- "." diff --git a/emacs.d/vendor/flycheck/test/resources/language/html.html b/emacs.d/vendor/flycheck/test/resources/language/html.html deleted file mode 100644 index 10c7b70..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/html.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Hello world - - - - - diff --git a/emacs.d/vendor/flycheck/test/resources/language/javascript/.eslintrc.json b/emacs.d/vendor/flycheck/test/resources/language/javascript/.eslintrc.json deleted file mode 100644 index c36e2f6..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/javascript/.eslintrc.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "rules" : { - "strict": 1, - "no-unused-vars": 1 - } -} \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/javascript/eslint.json b/emacs.d/vendor/flycheck/test/resources/language/javascript/eslint.json deleted file mode 100644 index ef938a3..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/javascript/eslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "rules" : { - "strict": 1, - "no-unused-vars": 1 - } -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/javascript/jshintrc b/emacs.d/vendor/flycheck/test/resources/language/javascript/jshintrc deleted file mode 100644 index 3be327a..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/javascript/jshintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "unused": "strict" -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/javascript/style.js b/emacs.d/vendor/flycheck/test/resources/language/javascript/style.js deleted file mode 100644 index 8247faa..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/javascript/style.js +++ /dev/null @@ -1,5 +0,0 @@ -/** Tab indentation */ - -(function() { - var foo = ["Hello world"]; -}()); diff --git a/emacs.d/vendor/flycheck/test/resources/language/javascript/syntax-error.js b/emacs.d/vendor/flycheck/test/resources/language/javascript/syntax-error.js deleted file mode 100644 index 6218971..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/javascript/syntax-error.js +++ /dev/null @@ -1,3 +0,0 @@ -/** A bad if */ - -if ( /* nothing here */ ) // comment diff --git a/emacs.d/vendor/flycheck/test/resources/language/javascript/warnings.js b/emacs.d/vendor/flycheck/test/resources/language/javascript/warnings.js deleted file mode 100644 index ce5b7db..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/javascript/warnings.js +++ /dev/null @@ -1,5 +0,0 @@ -/** An unused variable, and some invalid spacing */ - -(function() { - var foo = ["Hello world" ]; -}()); diff --git a/emacs.d/vendor/flycheck/test/resources/language/json.json b/emacs.d/vendor/flycheck/test/resources/language/json.json deleted file mode 100644 index 99fc878..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/json.json +++ /dev/null @@ -1,2 +0,0 @@ -{ "Comment": "Test two top-level objects" }, -{ "Comment": "This object is misplaced" } diff --git a/emacs.d/vendor/flycheck/test/resources/language/jsonnet/runtime_error.jsonnet b/emacs.d/vendor/flycheck/test/resources/language/jsonnet/runtime_error.jsonnet deleted file mode 100644 index 4898289..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/jsonnet/runtime_error.jsonnet +++ /dev/null @@ -1,3 +0,0 @@ -{ - a: std.flat() -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/jsonnet/static_error.jsonnet b/emacs.d/vendor/flycheck/test/resources/language/jsonnet/static_error.jsonnet deleted file mode 100644 index de4d8e4..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/jsonnet/static_error.jsonnet +++ /dev/null @@ -1,3 +0,0 @@ -import ||| - xyz -||| diff --git a/emacs.d/vendor/flycheck/test/resources/language/less/file-error.less b/emacs.d/vendor/flycheck/test/resources/language/less/file-error.less deleted file mode 100644 index 7323567..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/less/file-error.less +++ /dev/null @@ -1,6 +0,0 @@ -.something {} - -@import "no-such-file.less"; - -#otherthing { -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/less/syntax-error.less b/emacs.d/vendor/flycheck/test/resources/language/less/syntax-error.less deleted file mode 100644 index eff3719..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/less/syntax-error.less +++ /dev/null @@ -1 +0,0 @@ -.{something {} diff --git a/emacs.d/vendor/flycheck/test/resources/language/llvm.ll b/emacs.d/vendor/flycheck/test/resources/language/llvm.ll deleted file mode 100644 index 7eaef61..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/llvm.ll +++ /dev/null @@ -1,6 +0,0 @@ -define i32 @mul_add(i32 %x, i32 %y, i32 %z) { -entry: - %tmp = mul i32 %x, %y - %tmp2 = add i64 %tmp, %z - ret i32 %tmp2 -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/lua/custom.luacheckrc b/emacs.d/vendor/flycheck/test/resources/language/lua/custom.luacheckrc deleted file mode 100644 index f95a947..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/lua/custom.luacheckrc +++ /dev/null @@ -1 +0,0 @@ -unused_args = false diff --git a/emacs.d/vendor/flycheck/test/resources/language/lua/ngx_lua.warnings.lua b/emacs.d/vendor/flycheck/test/resources/language/lua/ngx_lua.warnings.lua deleted file mode 100644 index 6cf5501..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/lua/ngx_lua.warnings.lua +++ /dev/null @@ -1,8 +0,0 @@ -local name = ngx.var.arg_name or "Anonymous" - -local function test(arg) - local var2 - return var2 -end - -ngx.say("Hello, ", name, "!") diff --git a/emacs.d/vendor/flycheck/test/resources/language/lua/syntax-error.lua b/emacs.d/vendor/flycheck/test/resources/language/lua/syntax-error.lua deleted file mode 100644 index 8e91293..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/lua/syntax-error.lua +++ /dev/null @@ -1,7 +0,0 @@ --- A syntax error caused by a missing quote --- --- Checkers: lua - -print "oh no - -print "hello world" diff --git a/emacs.d/vendor/flycheck/test/resources/language/lua/warnings.lua b/emacs.d/vendor/flycheck/test/resources/language/lua/warnings.lua deleted file mode 100644 index 1fdd94c..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/lua/warnings.lua +++ /dev/null @@ -1,6 +0,0 @@ -global_var = 1 - -local function test(arg) - local var2 - return var2 -end diff --git a/emacs.d/vendor/flycheck/test/resources/language/markdown.md b/emacs.d/vendor/flycheck/test/resources/language/markdown.md deleted file mode 100644 index 3523032..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/markdown.md +++ /dev/null @@ -1,4 +0,0 @@ -## Second Header First - - -Trailing space diff --git a/emacs.d/vendor/flycheck/test/resources/language/nix/syntax-error.nix b/emacs.d/vendor/flycheck/test/resources/language/nix/syntax-error.nix deleted file mode 100644 index 6b02148..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/nix/syntax-error.nix +++ /dev/null @@ -1,4 +0,0 @@ -let - number = 42 -in - number * 10 diff --git a/emacs.d/vendor/flycheck/test/resources/language/nix/warnings.nix b/emacs.d/vendor/flycheck/test/resources/language/nix/warnings.nix deleted file mode 100644 index 70170d8..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/nix/warnings.nix +++ /dev/null @@ -1,5 +0,0 @@ -let - x = 5; -in rec { - inherit x; -} \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/opam.opam b/emacs.d/vendor/flycheck/test/resources/language/opam.opam deleted file mode 100644 index 229c022..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/opam.opam +++ /dev/null @@ -1,2 +0,0 @@ -opam-version: "2.0" -maintainers: "John Doe " diff --git a/emacs.d/vendor/flycheck/test/resources/language/perl.pl b/emacs.d/vendor/flycheck/test/resources/language/perl.pl deleted file mode 100644 index 1b9a0c5..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/perl.pl +++ /dev/null @@ -1,11 +0,0 @@ -package perl; - -use strict; -use warnings; - -$x = <*.pl>; - -system('ls'); - -die if undef; -1; diff --git a/emacs.d/vendor/flycheck/test/resources/language/perl/DependencyA.pm b/emacs.d/vendor/flycheck/test/resources/language/perl/DependencyA.pm deleted file mode 100644 index f8db4c0..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/perl/DependencyA.pm +++ /dev/null @@ -1,9 +0,0 @@ -package DependencyA; - -use parent Exporter; - -@EXPORT = qw($dependency_a); - -our $dependency_a = 'foo'; - -1; diff --git a/emacs.d/vendor/flycheck/test/resources/language/perl/DependencyB.pm b/emacs.d/vendor/flycheck/test/resources/language/perl/DependencyB.pm deleted file mode 100644 index 80897d4..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/perl/DependencyB.pm +++ /dev/null @@ -1,9 +0,0 @@ -package DependencyB; - -use parent Exporter; - -@EXPORT = qw($dependency_b); - -our $dependency_b = 'bar'; - -1; diff --git a/emacs.d/vendor/flycheck/test/resources/language/perl/Script.pl b/emacs.d/vendor/flycheck/test/resources/language/perl/Script.pl deleted file mode 100644 index 5bf2b64..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/perl/Script.pl +++ /dev/null @@ -1,6 +0,0 @@ -use strict; - -print $dependency_a; -print $dependency_b; - -1; diff --git a/emacs.d/vendor/flycheck/test/resources/language/php/syntax-error.php b/emacs.d/vendor/flycheck/test/resources/language/php/syntax-error.php deleted file mode 100644 index fce9a72..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/php/syntax-error.php +++ /dev/null @@ -1,10 +0,0 @@ - \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/php/warnings.php b/emacs.d/vendor/flycheck/test/resources/language/php/warnings.php deleted file mode 100644 index 53e8546..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/php/warnings.php +++ /dev/null @@ -1,30 +0,0 @@ - - * @license http://www.gnu.org/licenses/gpl.html GPL-3 - * @link https://github.com/flycheck/flycheck - */ - -class A -{ - private static $FOO = 2; - - /** Does nothing useful */ - private function bar($baz) - { - $i=FALSE; - } -} - -?> diff --git a/emacs.d/vendor/flycheck/test/resources/language/processing/syntax_error/syntax_error.pde b/emacs.d/vendor/flycheck/test/resources/language/processing/syntax_error/syntax_error.pde deleted file mode 100644 index ce4dbe7..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/processing/syntax_error/syntax_error.pde +++ /dev/null @@ -1,8 +0,0 @@ -void setup(){ - size(100, 100); - background(100) -} - -void draw(){ - -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/protobuf/protobuf/syntax-error.proto b/emacs.d/vendor/flycheck/test/resources/language/protobuf/protobuf/syntax-error.proto deleted file mode 100644 index 1d76c47..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/protobuf/protobuf/syntax-error.proto +++ /dev/null @@ -1,3 +0,0 @@ -message Person { - required string name; -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/protobuf/prototool/missing_syntax.proto b/emacs.d/vendor/flycheck/test/resources/language/protobuf/prototool/missing_syntax.proto deleted file mode 100644 index cfbea3e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/protobuf/prototool/missing_syntax.proto +++ /dev/null @@ -1,5 +0,0 @@ -package foo; - -message Bar { - int64 hello = 1; -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/protobuf/prototool/prototool.yaml b/emacs.d/vendor/flycheck/test/resources/language/protobuf/prototool/prototool.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/emacs.d/vendor/flycheck/test/resources/language/pug/foo-base.pug b/emacs.d/vendor/flycheck/test/resources/language/pug/foo-base.pug deleted file mode 100644 index 17f67a3..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/pug/foo-base.pug +++ /dev/null @@ -1,4 +0,0 @@ -html - head - body - block content diff --git a/emacs.d/vendor/flycheck/test/resources/language/pug/foo-unknown-filter.pug b/emacs.d/vendor/flycheck/test/resources/language/pug/foo-unknown-filter.pug deleted file mode 100644 index bc9a671..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/pug/foo-unknown-filter.pug +++ /dev/null @@ -1 +0,0 @@ -:myfilter diff --git a/emacs.d/vendor/flycheck/test/resources/language/pug/foo.pug b/emacs.d/vendor/flycheck/test/resources/language/pug/foo.pug deleted file mode 100644 index 2fc784a..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/pug/foo.pug +++ /dev/null @@ -1,9 +0,0 @@ -extends foo-base - -block content - h1 Hello World - h2 Some h2 content - h3 Some h3 content - h4 Some h4 content - -h5 This is going to cause an error diff --git a/emacs.d/vendor/flycheck/test/resources/language/pug/pug-extends.pug b/emacs.d/vendor/flycheck/test/resources/language/pug/pug-extends.pug deleted file mode 100644 index e8b6f65..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/pug/pug-extends.pug +++ /dev/null @@ -1,3 +0,0 @@ -extends /foo/bar/baz.pug -block content - h2 This is content diff --git a/emacs.d/vendor/flycheck/test/resources/language/pug/pug-runtime-error.pug b/emacs.d/vendor/flycheck/test/resources/language/pug/pug-runtime-error.pug deleted file mode 100644 index 5aa2c40..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/pug/pug-runtime-error.pug +++ /dev/null @@ -1,5 +0,0 @@ -doctype html -html - head - body - h1=foo.bar diff --git a/emacs.d/vendor/flycheck/test/resources/language/pug/pug.pug b/emacs.d/vendor/flycheck/test/resources/language/pug/pug.pug deleted file mode 100644 index ba22fe7..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/pug/pug.pug +++ /dev/null @@ -1,6 +0,0 @@ -doctype html - html - head - title Pug Examples - body - h1 Markup example diff --git a/emacs.d/vendor/flycheck/test/resources/language/puppet/parser-error.pp b/emacs.d/vendor/flycheck/test/resources/language/puppet/parser-error.pp deleted file mode 100644 index 8b6f8d5..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/puppet/parser-error.pp +++ /dev/null @@ -1,4 +0,0 @@ -# Test single line error message -class {'parser_err1': - hello > 'something', -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/puppet/puppet3-parser-error.pp b/emacs.d/vendor/flycheck/test/resources/language/puppet/puppet3-parser-error.pp deleted file mode 100644 index 49aef70..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/puppet/puppet3-parser-error.pp +++ /dev/null @@ -1,5 +0,0 @@ -# Test that the missing comma error is parsed -class {'parser_error': - hello => 'test' - helloagain => 'test' -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/puppet/puppet3-parser-multiline-error.pp b/emacs.d/vendor/flycheck/test/resources/language/puppet/puppet3-parser-multiline-error.pp deleted file mode 100644 index 68cd3d1..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/puppet/puppet3-parser-multiline-error.pp +++ /dev/null @@ -1,5 +0,0 @@ -# Test that the multiline error output of puppet parser is parsed -file { 'test': - ensure => file, - contents => something' -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/puppet/warnings.pp b/emacs.d/vendor/flycheck/test/resources/language/puppet/warnings.pp deleted file mode 100644 index 84749f5..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/puppet/warnings.pp +++ /dev/null @@ -1,11 +0,0 @@ -# Class: foo::bar -class foo::bar { - case $::operatingsystem { - debian: { - $version = '1.2.3' - } - redhat: { - $version = '6.6.6' - } - } -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/python/__init__.py b/emacs.d/vendor/flycheck/test/resources/language/python/__init__.py deleted file mode 100644 index 842857a..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/python/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8; -*- - -def antigravity(): - pass diff --git a/emacs.d/vendor/flycheck/test/resources/language/python/gh_1383.py b/emacs.d/vendor/flycheck/test/resources/language/python/gh_1383.py deleted file mode 100644 index 5a7ed6e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/python/gh_1383.py +++ /dev/null @@ -1,6 +0,0 @@ -# pylint: disable=missing-module-docstring -import sys # This has column 0 - -""" -This error has column -1 -""" diff --git a/emacs.d/vendor/flycheck/test/resources/language/python/invalid_type.py b/emacs.d/vendor/flycheck/test/resources/language/python/invalid_type.py deleted file mode 100644 index a17b5e7..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/python/invalid_type.py +++ /dev/null @@ -1,2 +0,0 @@ -def foo(x: str) -> int: - return x diff --git a/emacs.d/vendor/flycheck/test/resources/language/python/syntax-error.py b/emacs.d/vendor/flycheck/test/resources/language/python/syntax-error.py deleted file mode 100644 index e3b9e1f..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/python/syntax-error.py +++ /dev/null @@ -1,3 +0,0 @@ -# A straight syntax error - -foo = import bar diff --git a/emacs.d/vendor/flycheck/test/resources/language/python/test.py b/emacs.d/vendor/flycheck/test/resources/language/python/test.py deleted file mode 100644 index 6271b51..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/python/test.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8; -*- - -import sys - -from sys import antigravit # Typo intended! - -class Spam(object): - - def withEggs(self, number_of_eggs): - return map(str, range(number_of_eggs)) - - def with_ham(self, blubb = None): - if blubb: - if sys.python_version[0] > 3: - print('yes') - else: - print('no') - else: - return 'foo' - - -antigravity() diff --git a/emacs.d/vendor/flycheck/test/resources/language/r.R b/emacs.d/vendor/flycheck/test/resources/language/r.R deleted file mode 100644 index 5a3e675..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/r.R +++ /dev/null @@ -1,7 +0,0 @@ -a <- function(file, b = 2) {cat("Hello World!\\n", file=file) -} -b <- function() { - "/absolute/path/to/file" -} -b <- function() { - b diff --git a/emacs.d/vendor/flycheck/test/resources/language/racket.rkt b/emacs.d/vendor/flycheck/test/resources/language/racket.rkt deleted file mode 100644 index 3f37417..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/racket.rkt +++ /dev/null @@ -1,5 +0,0 @@ -(define listener (tcp-listen 12345)) -(let echo-server () - (define-values (in out) (tcp-accept listener)) - (thread (lambda () (copy-port in out) - (close-output-port out)) diff --git a/emacs.d/vendor/flycheck/test/resources/language/rpm.spec b/emacs.d/vendor/flycheck/test/resources/language/rpm.spec deleted file mode 100644 index a3a60cd..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rpm.spec +++ /dev/null @@ -1,22 +0,0 @@ -Name: foo -Version: 1 -Release: 1 -License: GPL -Summary: test spec file - -BuildArch: x86_64 - -%description - -%prep - -%build - -%clean - -%install - -%changelog - -* Tue Nov 6 2012 John Doe - 2 -- %{_bindir} is cool diff --git a/emacs.d/vendor/flycheck/test/resources/language/rst/errors.rst b/emacs.d/vendor/flycheck/test/resources/language/rst/errors.rst deleted file mode 100644 index 2853bf4..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rst/errors.rst +++ /dev/null @@ -1,26 +0,0 @@ -============= - Hello world -============= - -Lorem ipsum. - -A title with short underline -==== - - -.. warning:: - - Foo - === - -Let us check ReStructuredText_. - -Oh now, this one is too ----- - -Really, it's cool_! - -.. note:: - - Bar - === diff --git a/emacs.d/vendor/flycheck/test/resources/language/rst/sphinx/conf.py b/emacs.d/vendor/flycheck/test/resources/language/rst/sphinx/conf.py deleted file mode 100644 index 6378a32..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rst/sphinx/conf.py +++ /dev/null @@ -1,12 +0,0 @@ -# -*- coding: utf-8 -*- - -# Simple dummy Sphinx configuration - -source_suffix = '.rst' -master_doc = 'index' - -# General information about the project. -project = u'rst-sphinx' -copyright = u'2014, Foo' -version = '0' -release = '0' diff --git a/emacs.d/vendor/flycheck/test/resources/language/rst/sphinx/index.rst b/emacs.d/vendor/flycheck/test/resources/language/rst/sphinx/index.rst deleted file mode 100644 index 9085478..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rst/sphinx/index.rst +++ /dev/null @@ -1,9 +0,0 @@ -An dummy documentation -=================== - -Contents: - -.. toctree:: - :maxdepth: 2 - -Really, it's cool_ with :envvar:`FOO`! diff --git a/emacs.d/vendor/flycheck/test/resources/language/ruby/syntax-error.rb b/emacs.d/vendor/flycheck/test/resources/language/ruby/syntax-error.rb deleted file mode 100644 index 5601adf..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/ruby/syntax-error.rb +++ /dev/null @@ -1,5 +0,0 @@ -# A syntax error caused by a missing quote -# Taken from http://stackoverflow.com/a/7317453/355252 - -days = "abc -puts "Here are the days" diff --git a/emacs.d/vendor/flycheck/test/resources/language/ruby/warnings.rb b/emacs.d/vendor/flycheck/test/resources/language/ruby/warnings.rb deleted file mode 100644 index ca30538..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/ruby/warnings.rb +++ /dev/null @@ -1,16 +0,0 @@ -# A bunch of questionable Ruby stuff - -class Person - def initialize(_name) - arr = [:one, :twoTho, :top_gun] - puts "test" - end - - def greet - if true then - return "Hello, #{@name}" - end - end -end - -test == 20 diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/.gitignore b/emacs.d/vendor/flycheck/test/resources/language/rust/.gitignore deleted file mode 100644 index 14d6140..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Ignore Cargo stuff -target/ \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/Cargo.lock b/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/Cargo.lock deleted file mode 100644 index c6b3be2..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/Cargo.lock +++ /dev/null @@ -1,6 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "cargo-targets" -version = "0.1.0" - diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/Cargo.toml b/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/Cargo.toml deleted file mode 100644 index 9c3e694..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/Cargo.toml +++ /dev/null @@ -1,3 +0,0 @@ -[package] -name = "cargo-targets" -version = "0.1.0" diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/benches/a.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/benches/a.rs deleted file mode 100644 index 78d0434..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/benches/a.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { let foo_bench_a = 0; } - -#[test] -fn test() { let foo_bench_a_test = 0; } diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/examples/a.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/examples/a.rs deleted file mode 100644 index a30f650..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/examples/a.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { let foo_ex_a = 0; } - -#[test] -fn test() { let foo_ex_a_test = 0; } diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/a.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/a.rs deleted file mode 100644 index 8c0ccc1..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/a.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn foo_a() {} - -#[test] -fn test() { let foo_a_test = 0; } diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/bin/a.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/bin/a.rs deleted file mode 100644 index 13f17f3..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/bin/a.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { let foo_bin_a = 0; } - -#[test] -fn test() { let foo_bin_a_test = 0; } diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/lib.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/lib.rs deleted file mode 100644 index 042d470..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/lib.rs +++ /dev/null @@ -1,6 +0,0 @@ -mod a; - -fn foo_lib() {} - -#[test] -fn test() { let foo_lib_test = 0; } diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/main.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/main.rs deleted file mode 100644 index a926f97..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/src/main.rs +++ /dev/null @@ -1,4 +0,0 @@ -fn main() { let foo_main = 0; } - -#[test] -fn test() { let foo_main_test = 0; } diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/tests/a.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/tests/a.rs deleted file mode 100644 index 09bdd24..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/cargo-targets/tests/a.rs +++ /dev/null @@ -1,4 +0,0 @@ -#[test] -fn foo() { let foo_test_a_test = 0; } - -fn foo_test_a() {} diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/Cargo.lock b/emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/Cargo.lock deleted file mode 100644 index 76545b3..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/Cargo.lock +++ /dev/null @@ -1,16 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "dev-deps" -version = "0.1.0" -dependencies = [ - "lazy_static 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lazy_static" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[metadata] -"checksum lazy_static 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2f61b8421c7a4648c391611625d56fdd5c7567da05af1be655fd8cacc643abb3" diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/Cargo.toml b/emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/Cargo.toml deleted file mode 100644 index 1def686..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "dev-deps" -version = "0.1.0" - -[dependencies] - -[dev-dependencies] -lazy_static = "0.2.2" diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/src/lib.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/src/lib.rs deleted file mode 100644 index de4b42e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/dev-deps/src/lib.rs +++ /dev/null @@ -1,10 +0,0 @@ -#[cfg(test)] -#[macro_use] -extern crate lazy_static; - -mod tests { - #[test] - fn it_works() { - let foo = 0; - } -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/Cargo.lock b/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/Cargo.lock deleted file mode 100644 index 7f9a541..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/Cargo.lock +++ /dev/null @@ -1,6 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "flycheck-test" -version = "0.1.0" - diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/Cargo.toml b/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/Cargo.toml deleted file mode 100644 index 9d661a9..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/Cargo.toml +++ /dev/null @@ -1,3 +0,0 @@ -[package] -name = "flycheck-test" -version = "0.1.0" diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/imported.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/imported.rs deleted file mode 100644 index 1b90eb1..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/imported.rs +++ /dev/null @@ -1 +0,0 @@ -pub static BAR: u32 = 42; diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/importing.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/importing.rs deleted file mode 100644 index 402f451..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/importing.rs +++ /dev/null @@ -1,5 +0,0 @@ -use super::imported; -pub fn foo() { - let x = "10"; - println!("hey {}", imported::BAR); -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/macro-error.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/macro-error.rs deleted file mode 100644 index c2506bd..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/macro-error.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn foo() { - println!("{}"); -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/main.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/main.rs deleted file mode 100644 index 124dbb2..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/main.rs +++ /dev/null @@ -1,9 +0,0 @@ -mod imported; -mod importing; -mod warnings; - -pub fn main() { - // Prevent an unused function foo() warning :) - importing::foo(); - println!("Hello, world!"); -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/multiline-error.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/multiline-error.rs deleted file mode 100644 index 930b8c8..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/multiline-error.rs +++ /dev/null @@ -1,8 +0,0 @@ -fn foo(bar: u8) -> u8 { - bar + 1 -} - -fn spam() { - let i: i8 = -1; - foo(i); -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/note-and-help.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/note-and-help.rs deleted file mode 100644 index aef573b..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/note-and-help.rs +++ /dev/null @@ -1,13 +0,0 @@ -// a note/info about lifetimes - -// a non-POD type -struct NonPOD; -impl Drop for NonPOD { - fn drop(&mut self) {} -} - -fn main() { - let _x = NonPOD; - let _y = _x; // note: x's lifetime ends here - let _z = _x; // error: can no longer move x -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/syntax-error.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/syntax-error.rs deleted file mode 100644 index 70b8642..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/syntax-error.rs +++ /dev/null @@ -1,5 +0,0 @@ -// A simple syntax error - -fn main() { - bla; -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/warnings.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/warnings.rs deleted file mode 100644 index 1717b9e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/flycheck-test/src/warnings.rs +++ /dev/null @@ -1,5 +0,0 @@ -// A warning for an unused variable - -fn main() { - let x = true; -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/Cargo.lock b/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/Cargo.lock deleted file mode 100644 index b1839bc..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/Cargo.lock +++ /dev/null @@ -1,6 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "lib-main" -version = "0.1.0" - diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/Cargo.toml b/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/Cargo.toml deleted file mode 100644 index fdce625..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/Cargo.toml +++ /dev/null @@ -1,3 +0,0 @@ -[package] -name = "lib-main" -version = "0.1.0" \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/src/lib.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/src/lib.rs deleted file mode 100644 index e3b9857..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -// Doesn't compile, but since lib.rs is an implicit dependency of main.rs, this -// will cause an error when using `cargo rustc -- --error-format=json`. -fn foo() { zorglub } diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/src/main.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/src/main.rs deleted file mode 100644 index fff293d..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/lib-main/src/main.rs +++ /dev/null @@ -1 +0,0 @@ -fn main() { let unused = 0; } diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/Cargo.lock b/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/Cargo.lock deleted file mode 100644 index da8c326..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/Cargo.lock +++ /dev/null @@ -1,6 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "crate1" -version = "0.1.0" - diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/Cargo.toml b/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/Cargo.toml deleted file mode 100644 index a21ed95..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/Cargo.toml +++ /dev/null @@ -1,2 +0,0 @@ -[workspace] -members = ["crate1"] diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/crate1/Cargo.toml b/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/crate1/Cargo.toml deleted file mode 100644 index b3ca32b..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/crate1/Cargo.toml +++ /dev/null @@ -1,3 +0,0 @@ -[package] -name = "crate1" -version = "0.1.0" diff --git a/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/crate1/src/lib.rs b/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/crate1/src/lib.rs deleted file mode 100644 index 787e297..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/rust/workspace/crate1/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - let a = 0; -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/sass/error.sass b/emacs.d/vendor/flycheck/test/resources/language/sass/error.sass deleted file mode 100644 index 739fb23..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/sass/error.sass +++ /dev/null @@ -1,5 +0,0 @@ -// A syntax error caused by inconsistent indentation - -.a - .b - .c diff --git a/emacs.d/vendor/flycheck/test/resources/language/sass/warning.sass b/emacs.d/vendor/flycheck/test/resources/language/sass/warning.sass deleted file mode 100644 index 38f887d..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/sass/warning.sass +++ /dev/null @@ -1,3 +0,0 @@ -.container - @warn "this is deprecated" - font-size: 18px diff --git a/emacs.d/vendor/flycheck/test/resources/language/scala/scalastyle.xml b/emacs.d/vendor/flycheck/test/resources/language/scala/scalastyle.xml deleted file mode 100644 index ca4c863..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/scala/scalastyle.xml +++ /dev/null @@ -1,10 +0,0 @@ - - Scalastyle test configuration - - - - - - Don't use println - - diff --git a/emacs.d/vendor/flycheck/test/resources/language/scala/style-error.scala b/emacs.d/vendor/flycheck/test/resources/language/scala/style-error.scala deleted file mode 100644 index 771a34a..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/scala/style-error.scala +++ /dev/null @@ -1,7 +0,0 @@ -// Scala style error - -object Error { - - def main(args:Array[String]): Unit = - println("hello, world") -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/scala/style-warning.scala b/emacs.d/vendor/flycheck/test/resources/language/scala/style-warning.scala deleted file mode 100644 index 344aa77..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/scala/style-warning.scala +++ /dev/null @@ -1,6 +0,0 @@ -// Scala style warning - -object Warning { - - class WarningClass {} -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/scala/syntax-error.scala b/emacs.d/vendor/flycheck/test/resources/language/scala/syntax-error.scala deleted file mode 100644 index 2204212..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/scala/syntax-error.scala +++ /dev/null @@ -1,5 +0,0 @@ -// Scala syntax error - -object { - println("hello, world") -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/scss/error.scss b/emacs.d/vendor/flycheck/test/resources/language/scss/error.scss deleted file mode 100644 index 1ce6fd0..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/scss/error.scss +++ /dev/null @@ -1,5 +0,0 @@ -#container { - &.error { - c olor: red; - } -} \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/scss/lint-error.scss b/emacs.d/vendor/flycheck/test/resources/language/scss/lint-error.scss deleted file mode 100644 index a64b3f1..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/scss/lint-error.scss +++ /dev/null @@ -1,5 +0,0 @@ -#container { - &.error { - color: red; - } -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/scss/scss-lint.yml b/emacs.d/vendor/flycheck/test/resources/language/scss/scss-lint.yml deleted file mode 100644 index a111786..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/scss/scss-lint.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -linters: - ColorVariable: - enabled: false - IdSelector: - severity: error - Indentation: - enabled: false diff --git a/emacs.d/vendor/flycheck/test/resources/language/scss/warning.scss b/emacs.d/vendor/flycheck/test/resources/language/scss/warning.scss deleted file mode 100644 index a5a77e3..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/scss/warning.scss +++ /dev/null @@ -1,4 +0,0 @@ -.container { - @warn '.container is deprecated'; - font-size: 18px; -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/sh/bash-syntax-error.bash b/emacs.d/vendor/flycheck/test/resources/language/sh/bash-syntax-error.bash deleted file mode 100644 index b05125c..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/sh/bash-syntax-error.bash +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -if true then - echo "Hello World" -fi diff --git a/emacs.d/vendor/flycheck/test/resources/language/sh/posix-syntax-error.sh b/emacs.d/vendor/flycheck/test/resources/language/sh/posix-syntax-error.sh deleted file mode 100644 index 230c250..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/sh/posix-syntax-error.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -cat <(echo blah) diff --git a/emacs.d/vendor/flycheck/test/resources/language/sh/shellcheck.sh b/emacs.d/vendor/flycheck/test/resources/language/sh/shellcheck.sh deleted file mode 100644 index 7b1952d..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/sh/shellcheck.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -rm "~/my file.txt" -touch $@ -export LS=`which ls` diff --git a/emacs.d/vendor/flycheck/test/resources/language/sh/zsh-syntax-error.zsh b/emacs.d/vendor/flycheck/test/resources/language/sh/zsh-syntax-error.zsh deleted file mode 100644 index b6766bb..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/sh/zsh-syntax-error.zsh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/zsh - -if true then - echo "Hello World" -fi diff --git a/emacs.d/vendor/flycheck/test/resources/language/slim.slim b/emacs.d/vendor/flycheck/test/resources/language/slim.slim deleted file mode 100644 index d223d1d..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/slim.slim +++ /dev/null @@ -1,7 +0,0 @@ -doctype html - html - head - title Slim Examples - - body - h1 Markup examples diff --git a/emacs.d/vendor/flycheck/test/resources/language/sql.sql b/emacs.d/vendor/flycheck/test/resources/language/sql.sql deleted file mode 100644 index 2ee631c..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/sql.sql +++ /dev/null @@ -1 +0,0 @@ -SELECT 1 FROM '; diff --git a/emacs.d/vendor/flycheck/test/resources/language/systemd-analyze-test.service b/emacs.d/vendor/flycheck/test/resources/language/systemd-analyze-test.service deleted file mode 100644 index dce23db..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/systemd-analyze-test.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Test file for flycheck systemd-analyze checker -Documentation=foo://bar - -[Service] -ExecSmart= - -[Dog] diff --git a/emacs.d/vendor/flycheck/test/resources/language/tcl/test.tcl b/emacs.d/vendor/flycheck/test/resources/language/tcl/test.tcl deleted file mode 100644 index bfe2979..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/tcl/test.tcl +++ /dev/null @@ -1,12 +0,0 @@ -#!tclsh - -set vals {1 2 3} - -foreach val $vals { - puts $val - set tmp [expr $val * 3] - set val_${val} $tmp - puts [set val_${val}] -} - -set tmp 1 2 3 diff --git a/emacs.d/vendor/flycheck/test/resources/language/terraform/terraform/syntax-error.tf b/emacs.d/vendor/flycheck/test/resources/language/terraform/terraform/syntax-error.tf deleted file mode 100644 index 73d50d9..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/terraform/terraform/syntax-error.tf +++ /dev/null @@ -1,3 +0,0 @@ -provider "aws" { - region = "us-east-1"; -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/terraform/tflint/error.tf b/emacs.d/vendor/flycheck/test/resources/language/terraform/tflint/error.tf deleted file mode 100644 index c516fee..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/terraform/tflint/error.tf +++ /dev/null @@ -1,8 +0,0 @@ -module "unpinned" { - source = "git://hashicorp.com/consul.git" -} - -resource "aws_instance" "web" { - ami = "ami-b73b63a0" - instance_type = "t1.2xlarge" # invalid type -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/tex.tex b/emacs.d/vendor/flycheck/test/resources/language/tex.tex deleted file mode 100644 index 7bf119e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/tex.tex +++ /dev/null @@ -1,10 +0,0 @@ -\documentclass{article} - -\begin{document} - -Hello, Emacs is part of GNU. Do you like it? - -\foo{ -} - -\end{document} diff --git a/emacs.d/vendor/flycheck/test/resources/language/texinfo.texi b/emacs.d/vendor/flycheck/test/resources/language/texinfo.texi deleted file mode 100644 index 95694ec..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/texinfo.texi +++ /dev/null @@ -1,11 +0,0 @@ -\input texinfo -@setfilename texinfo.info -@settitle - -@contents - -@bold{foo} - -@printindex cp - -@bye diff --git a/emacs.d/vendor/flycheck/test/resources/language/text/text.txt b/emacs.d/vendor/flycheck/test/resources/language/text/text.txt deleted file mode 100644 index 0bd62a0..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/text/text.txt +++ /dev/null @@ -1,3 +0,0 @@ -he is very smart -we associate together -The lady lawyer handled my case. diff --git a/emacs.d/vendor/flycheck/test/resources/language/text/textlintrc.json b/emacs.d/vendor/flycheck/test/resources/language/text/textlintrc.json deleted file mode 100644 index 69aa638..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/text/textlintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rules": { - "write-good": true - } -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/typescript/package.json b/emacs.d/vendor/flycheck/test/resources/language/typescript/package.json deleted file mode 100644 index b309a80..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/typescript/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "devDependencies": { - "mocha": "^3.0.0" - } -} \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/resources/language/typescript/sample.ts b/emacs.d/vendor/flycheck/test/resources/language/typescript/sample.ts deleted file mode 100644 index 4c4629f..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/typescript/sample.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as mocha from 'mocha'; -import * as chai from 'chai'; - -function invalidAlignment() { - var a:string = "test string"; - alert('Hi!') -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/typescript/tslint.json b/emacs.d/vendor/flycheck/test/resources/language/typescript/tslint.json deleted file mode 100644 index 03533f7..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/typescript/tslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "rules": { - "no-var-keyword": true, - "semicolon": true, - "no-implicit-dependencies": [true, "dev"] - } -} diff --git a/emacs.d/vendor/flycheck/test/resources/language/verilog/verilator_error.v b/emacs.d/vendor/flycheck/test/resources/language/verilog/verilator_error.v deleted file mode 100644 index d1694cb..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/verilog/verilator_error.v +++ /dev/null @@ -1,7 +0,0 @@ -module verilog_verilator_error; - initial begin - forever begin - i = $fopen("test.log"); - end - end -endmodule diff --git a/emacs.d/vendor/flycheck/test/resources/language/verilog/verilator_warning.v b/emacs.d/vendor/flycheck/test/resources/language/verilog/verilator_warning.v deleted file mode 100644 index 1f7babc..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/verilog/verilator_warning.v +++ /dev/null @@ -1,3 +0,0 @@ -module verilator_warning; - reg val; -endmodule diff --git a/emacs.d/vendor/flycheck/test/resources/language/vhdl.vhd b/emacs.d/vendor/flycheck/test/resources/language/vhdl.vhd deleted file mode 100644 index 17bd096..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/vhdl.vhd +++ /dev/null @@ -1,3 +0,0 @@ -entity syntax_error is -end entity syntax_error - diff --git a/emacs.d/vendor/flycheck/test/resources/language/xml.xml b/emacs.d/vendor/flycheck/test/resources/language/xml.xml deleted file mode 100644 index 3122d7e..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/xml.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/emacs.d/vendor/flycheck/test/resources/language/yaml.yaml b/emacs.d/vendor/flycheck/test/resources/language/yaml.yaml deleted file mode 100644 index 1052e59..0000000 --- a/emacs.d/vendor/flycheck/test/resources/language/yaml.yaml +++ /dev/null @@ -1,5 +0,0 @@ -# A simple syntax error in YAML - -A: foo - a1: bar - a2: baz diff --git a/emacs.d/vendor/flycheck/test/resources/narrowing.el b/emacs.d/vendor/flycheck/test/resources/narrowing.el deleted file mode 100644 index c745000..0000000 --- a/emacs.d/vendor/flycheck/test/resources/narrowing.el +++ /dev/null @@ -1,17 +0,0 @@ -;;; narrowing.el --- Trigger errors with narrowing - -;;; Commentary: - -;; A file to test narrowing - -;;; Code: - -(message "We are before of narrowing here: %s") - -(defun we-narrow-to-this-function () - "This docstring has no final period" - (message "Hello %s")) - -(message "We are after of narrowing here: %s") - -;;; narrowing.el ends here diff --git a/emacs.d/vendor/flycheck/test/resources/substitute-dummy b/emacs.d/vendor/flycheck/test/resources/substitute-dummy deleted file mode 100644 index 2cd6049..0000000 --- a/emacs.d/vendor/flycheck/test/resources/substitute-dummy +++ /dev/null @@ -1 +0,0 @@ -A dummy file used in substitution tests in test-checker-api.el \ No newline at end of file diff --git a/emacs.d/vendor/flycheck/test/run.el b/emacs.d/vendor/flycheck/test/run.el deleted file mode 100644 index ecfad1c..0000000 --- a/emacs.d/vendor/flycheck/test/run.el +++ /dev/null @@ -1,141 +0,0 @@ -;;; run.el --- Flycheck: Test runner -*- lexical-binding: t; -*- - -;; Copyright (C) 2017-2018 Flycheck contributors -;; Copyright (C) 2014-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner -;; Maintainer: Clément Pit-Claudel -;; fmdkdd -;; URL: https://www.flycheck.org - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Flycheck test runner. - -;;; Code: - -(defun flycheck-run-check-selector (selector) - "Check SELECTOR if it fails loading." - (with-temp-buffer - (insert selector) - (goto-char (point-min)) - (condition-case nil - (progn - (check-parens) - (message "Invalid selector: %S" selector)) - (error - (message "Unbalanced parenthesis in selector %S at %s" - selector (1+ (current-column))))))) - -(defun flycheck-transform-selector (selector) - "Transform SELECTOR to implement some custom selectors. - -This function adds the following custom selectors: - -`(language FOO)' -> `(tag language-FOO)' -`(checker FOO)' -> `(tag checker-FOO)'" - (pcase selector - (`(language ,(and language (pred symbolp))) - (list 'tag (intern (concat "language-" (symbol-name language))))) - (`(checker ,(and checker (pred symbolp))) - (list 'tag (intern (concat "checker-" (symbol-name checker))))) - (`(new-checker-for ,(and language (pred symbolp))) - ;; For a new checker for a language we need to run the documentation and - ;; style tests, and all tests for the corresponding language, in order to - ;; make sure that all chaining still works, and that the order of checkers - ;; is still correct. - (flycheck-transform-selector `(or (tag documentation) - (tag style) - (language ,language)))) - (`(,group . ,body) - (cons group (mapcar #'flycheck-transform-selector body))) - (simple simple))) - -(defun flycheck-read-whole-string (str) - "Read from whole STR." - (pcase-let ((`(,obj . ,index) (read-from-string str))) - (if (/= index (length str)) - (error "Can't read whole string") - obj))) - -(defun flycheck-run-tests-batch-and-exit () - "Run test cases matching tags in `argv' and exit. - -Read an ERT test selector from the first command line argument, -run matching tests and exit. See `ert-select-tests' and Info -Node `(ert)Test Selectors' for information about test selectors." - (when (string= (car argv) "--") - ;; Skip over the command line argument separator - (pop argv)) - (let ((selector (pop argv))) - (when argv - ;; Warn about unused trailing arguments, and remove them, to prevent Emacs - ;; from trying to parse them. - (message "WARNING: Unused trailing arguments: %S" argv) - (setq argv nil)) - (setq selector - `(and "flycheck-" - ,(cond - ((not selector) t) - ((= (length selector) 0) - (message "Warning: Empty test selector, defaulting to t") - t) - (t (condition-case nil - (flycheck-read-whole-string selector) - (error - (flycheck-run-check-selector selector) - (kill-emacs 1))))))) - (flycheck-run-unlimit-ert-pretty-printer) - (ert-run-tests-batch-and-exit (flycheck-transform-selector selector)))) - -;; ERT in batch mode will truncate long output by default. We don't want that, -;; as it's easier to fix failures with the full output, since we cannot always -;; easily reproduce locally (for integration tests running on CI). -(defun flycheck-run-unlimit-ert-pretty-printer () - "Install advice to unlimit the ERT output." - (advice-add 'ert--pp-with-indentation-and-newline :around - (lambda (orig &rest args) - (let ((print-length nil) - (print-level nil)) - (apply orig args))))) - -(defvar flycheck-runner-file - (if load-in-progress load-file-name (buffer-file-name))) - -(defun flycheck-run-tests-main () - "Main entry point of the test runner." - (let* ((load-prefer-newer t) - (source-directory (locate-dominating-file flycheck-runner-file "Cask")) - (pkg-rel-dir (format ".cask/%s.%S/elpa" - emacs-major-version - emacs-minor-version))) - - ;; Standardise on the C locale to prevent programs from writing fancy - ;; unicode characters and thus make test output predictable - (setenv "LC_ALL" "C") - - (setq package-user-dir (expand-file-name pkg-rel-dir source-directory)) - (package-initialize) - - (message "Running tests on Emacs %s, built at %s" - emacs-version (format-time-string "%F" emacs-build-time)) - - (let ((debug-on-error t)) - (flycheck-run-tests-batch-and-exit)))) - -;;; run.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/languages/test-c_c++.el b/emacs.d/vendor/flycheck/test/specs/languages/test-c_c++.el deleted file mode 100644 index 8ec3db1..0000000 --- a/emacs.d/vendor/flycheck/test/specs/languages/test-c_c++.el +++ /dev/null @@ -1,106 +0,0 @@ -;;; test-cpp.el --- Flycheck Specs: C/C++ -*- lexical-binding: t; -*- - -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for C/C++ support. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Language C/C++" - (describe "The Cppcheck error parser" - (let ((cppcheck-xml-without-errors " - - - - -") - (cppcheck-xml " - - - - - - - - - - - - - -")) - (it "parses Cppcheck XML using automatic parser selection" - (expect (flycheck-parse-cppcheck cppcheck-xml - 'checker 'buffer) - :to-be-equal-flycheck-errors - (list - (flycheck-error-new - :filename "foo" - :buffer 'buffer - :checker 'checker - :line 4 - :column nil - :level 'error - :message "Null pointer dereference" - :id "nullPointer") - (flycheck-error-new - :filename "bar" - :buffer 'buffer - :checker 'checker - :line 6 - :column nil - :level 'error - :message "Null pointer dereference" - :id "nullPointer") - (flycheck-error-new - :filename "eggs" - :buffer 'buffer - :checker 'checker - :line 2 - :column nil - :level 'warning - :message "The expression \"x\" is of type 'bool' and it is compared against a integer value that is neither 1 nor 0." - :id "comparisonOfBoolWithInt")))) - - (it "parses Cppcheck XML without errors using automatic parser selection" - (expect (flycheck-parse-cppcheck cppcheck-xml-without-errors - 'checker 'buffer) - :to-be-equal-flycheck-errors nil)) - - (it "parses Cppcheck XML without errors using builtin parser" - (let ((flycheck-xml-parser #'flycheck-parse-xml-region)) - (expect (flycheck-parse-cppcheck cppcheck-xml-without-errors - 'checker 'buffer) - :to-be-equal-flycheck-errors nil)))))) - -;;; test-c_c++.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/languages/test-emacs-lisp.el b/emacs.d/vendor/flycheck/test/specs/languages/test-emacs-lisp.el deleted file mode 100644 index 5878567..0000000 --- a/emacs.d/vendor/flycheck/test/specs/languages/test-emacs-lisp.el +++ /dev/null @@ -1,59 +0,0 @@ -;;; test-emacs-lisp.el --- Flycheck Specs: Emacs Lisp -*- lexical-binding: t; -*- - -;; Copyright (C) 2017 Flycheck contributors -;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Clément Pit-Claudel - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for Emacs Lisp support. - -;;; Code: - -(require 'flycheck-buttercup) -(require 'checkdoc) - -(defconst flycheck/excluded-checkdoc-vars - '(checkdoc-autofix-flag checkdoc-bouncy-flag checkdoc-minor-mode-string) - "Checkdoc variables that should not be passed to the checker.") - -(defun flycheck/custom-var-p (var) - "Check if VAR is a customization pair describing a variable." - (eq (cadr var) 'custom-variable)) - -(describe "Language Emacs Lisp" - - (describe "Checkdoc" - - (it "exports all customizable variables" - (assume (version<= "25" emacs-version) - "Checkdoc has additional variables in Emacs 25") - (let* ((checkdoc-custom-group (get 'checkdoc 'custom-group)) - (checkdoc-custom-pairs - (seq-filter #'flycheck/custom-var-p checkdoc-custom-group)) - (checkdoc-custom-vars (seq-map #'car checkdoc-custom-pairs)) - (checkdoc-relevant-vars - (cons 'sentence-end-double-space - (seq-difference checkdoc-custom-vars - flycheck/excluded-checkdoc-vars)))) - (expect (seq-sort #'string-lessp flycheck-emacs-lisp-checkdoc-variables) - :to-equal - (seq-sort #'string-lessp checkdoc-relevant-vars)))))) - -;;; test-emacs-lisp.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/languages/test-go.el b/emacs.d/vendor/flycheck/test/specs/languages/test-go.el deleted file mode 100644 index 2997ed9..0000000 --- a/emacs.d/vendor/flycheck/test/specs/languages/test-go.el +++ /dev/null @@ -1,55 +0,0 @@ -;;; test-go.el --- Flycheck Specs: Go -*- lexical-binding: t; -*- -;; -;;; Commentary: -;; -;; This file implements buttercup tests for the `go-staticheck' syntax checker. -;; -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Language Go" - (describe "The staticcheck error parser" - (let ((json " -{ - \"code\":\"compile\", - \"severity\":\"error\", - \"location\": { - \"file\":\"/home/gastove/golang/src/github.com/Gastove/test/pkg/lib/lib.go\", - \"line\":4, - \"column\":8 - }, - \"message\":\"expected ';', found ':'\"} -{ - \"code\":\"compile\", - \"severity\":\"warning\", - \"location\": { - \"file\":\"/home/gastove/golang/src/github.com/Gastove/test/pkg/lib/lib.go\", - \"line\":4, - \"column\":2 - }, - \"message\":\"undeclared name: Number\" -}" - )) - - (it "parses staticcheck JSON output" - (expect (flycheck-parse-go-staticcheck json 'checker 'buffer) - :to-be-equal-flycheck-errors - (list - (flycheck-error-new-at - 4 8 'error - "expected ';', found ':'" - :id "compile" - :checker 'checker - :buffer 'buffer - :filename "/home/gastove/golang/src/github.com/Gastove/test/pkg/lib/lib.go") - (flycheck-error-new-at - 4 2 'warning - "undeclared name: Number" - :id "compile" - :checker 'checker - :buffer 'buffer - :filename "/home/gastove/golang/src/github.com/Gastove/test/pkg/lib/lib.go") - )))))) - -;;; test-go.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/languages/test-haskell.el b/emacs.d/vendor/flycheck/test/specs/languages/test-haskell.el deleted file mode 100644 index 9b3c6eb..0000000 --- a/emacs.d/vendor/flycheck/test/specs/languages/test-haskell.el +++ /dev/null @@ -1,55 +0,0 @@ -;;; test-haskell.el --- Flycheck Specs: Haskell -*- lexical-binding: t; -*- - -;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for Haskell support. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Language Haskell" - - (describe "Module names" - (it "does not extract a module name from commented code" - (expect flycheck-haskell-module-re - :not :to-match "-- | module Foo.Bar where")) - - (it "extracts a simple module name without exports" - (expect flycheck-haskell-module-re - :to-match-with-group "module Foo.Bar where" 1 "Foo.Bar")) - - (it "extracts a simple module name at the end of a line" - (expect flycheck-haskell-module-re - :to-match-with-group "module Hello.World\nwhere" 1 "Hello.World")) - - (it "extracts a module name with exports" - (expect flycheck-haskell-module-re - :to-match-with-group "module Spam.With.Eggs (eggs) where" - 1 "Spam.With.Eggs")) - - (it "extracts a module name with exports right after the name" - (expect flycheck-haskell-module-re - :to-match-with-group "module Hello.World(hello) where" - 1 "Hello.World")))) - -;;; test-haskell.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/languages/test-help.el b/emacs.d/vendor/flycheck/test/specs/languages/test-help.el deleted file mode 100644 index dcaf268..0000000 --- a/emacs.d/vendor/flycheck/test/specs/languages/test-help.el +++ /dev/null @@ -1,135 +0,0 @@ -;;; test-help.el --- Flycheck Specs: Syntax checker help -*- lexical-binding: t; -*- - -;; Copyright (C) 2017 Flycheck contributors -;; Copyright (C) 2016 Sebastian Wiesner - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for `flycheck-describe-checker' and related functions. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Syntax checker Help" - (describe "flycheck-describe-checker" - (let ((checker 'ruby-rubocop)) - (before-each - (let ((inhibit-message t)) - (flycheck-describe-checker checker))) - - (after-each - (when (buffer-live-p (get-buffer (help-buffer))) - (kill-buffer (help-buffer)))) - - (it (format "pops up a help buffer for %s" checker) - (expect (help-buffer) :to-be-live) - (expect (help-buffer) :to-be-visible)) - - (it (format "documents %s in the help buffer" checker) - (expect (help-buffer) :to-contain-match - (regexp-quote (symbol-name checker)))) - - (it (format "navigates to the source of %s" checker) - (with-current-buffer (help-buffer) - ;; Search for the button… - (re-search-forward (rx "`" (group (1+ (not (any "'")))) "'")) - (expect (match-string 1) :to-equal "flycheck.el") - ;; …and push it. We disable prompts about unsafe local variables and - ;; disable a bunch of hooks to make the underlying call to `find-file' - ;; as painless as possible. - (let ((enable-local-variables :safe) - hack-local-variables-hook - prog-mode-hook - emacs-lisp-mode-hook) - (push-button (match-beginning 1))) - (unwind-protect - (progn - (expect (buffer-name) :to-equal "flycheck.el") - (expect (looking-at (rx bol - (or "(flycheck-define-checker" - "(flycheck-define-command-checker") - symbol-end - " " (? "'") - symbol-start - (group (1+ (or (syntax word) - (syntax symbol)))) - symbol-end)) - :to-be-truthy) - (expect (match-string 1) :to-equal (symbol-name checker))) - ;; Kill the Flycheck buffer again - (kill-buffer)))) - - (it (format "shows next checkers in the help of %s" checker) - (let ((next-checkers (flycheck-checker-get checker 'next-checkers))) - (assume next-checkers (format "Syntax checker %S has no next checkers" - checker)) - (dolist (next-checker next-checkers) - (pcase next-checker - (`(,level . ,checker) - (expect (help-buffer) - :to-contain-match - (rx-to-string `(and "`" ,(symbol-name checker) - "' (maximum level `" - ,(symbol-name level)"')")))) - ((pred symbolp) - (expect (help-buffer) - :to-contain-match - (rx-to-string `(and "`" - ,(symbol-name next-checker) - "'")))))))) - - (it (format "shows the executable name in the help of %s" checker) - (let ((executable (flycheck-checker-default-executable checker))) - (expect (help-buffer) - :to-contain-match - (rx-to-string `(and "\"" ,executable "\""))))) - - (it (format "shows the executable variable in the help of %s" checker) - (let ((variable (flycheck-checker-executable-variable checker))) - (expect (help-buffer) - :to-contain-match - (regexp-quote (symbol-name variable))))) - - (it (format "shows the configuration file variable in the help of %s" - checker) - (let ((variable (flycheck-checker-get checker 'config-file-var))) - (assume variable (format "Syntax checker %s has no configuration file" - checker)) - (expect (help-buffer) - :to-contain-match - (regexp-quote (symbol-name variable))))) - - (it (format "shows the option variables in the help of %s" checker) - (let ((option-vars (flycheck-checker-get checker 'option-vars))) - (assume option-vars (format "Syntax checker %s has no options" - checker)) - (dolist (variable option-vars) - (expect (help-buffer) - :to-contain-match - (rx-to-string `(and "* `" - ,(symbol-name variable) - "'" eol)))))) - - (it (format "shows the docstring of %s" checker) - (let ((docstring (flycheck-checker-get checker 'documentation))) - (expect (help-buffer) :to-contain-match (regexp-quote docstring))))))) - -;;; test-help.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/languages/test-javascript.el b/emacs.d/vendor/flycheck/test/specs/languages/test-javascript.el deleted file mode 100644 index 8b8b415..0000000 --- a/emacs.d/vendor/flycheck/test/specs/languages/test-javascript.el +++ /dev/null @@ -1,75 +0,0 @@ -;;; test-javascript.el --- Flycheck Specs: JavaScript -*- lexical-binding: t; -*- - -;; Copyright (C) 2017-2018 Flycheck contributors - -;; Author: Saša Jovanić - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for JavaScript support. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Language JavaScript" - (describe "The ESLint error parser" - (let ((json "[{\"filePath\":\"test/resources/language/javascript/syntax-error.js\", - \"messages\":[{\"ruleId\":null,\"fatal\":true,\"severity\":2, - \"source\":\"if ( /* nothing here */ ) // comment\", - \"message\":\"Parsing error: Unexpected token )\", - \"line\":3,\"column\":25}], - \"errorCount\":1,\"warningCount\":0,\"fixableErrorCount\":0,\"fixableWarningCount\":0, - \"source\":\"/** A bad if */if ( /* nothing here */ ) // comment\"}]") - (json-without-errors "[{\"filePath\":\"/Users/username/Projects/elisp/flycheck/test/resources/language/javascript/jquery-3.2.1.js\", - \"messages\":[],\"errorCount\":0,\"warningCount\":0,\"fixableErrorCount\":0, - \"fixableWarningCount\":0}]") - (json-with-deprecations "DeprecationWarning: [eslint] The 'ecmaFeatures' config file property is deprecated, and has no effect.\n\n[{\"filePath\":\"test/resources/language/javascript/style.js\", - \"messages\":[{\"ruleId\":\"strict\",\"severity\":1, - \"message\":\"Use the function form of 'use strict'.\", - \"line\":3,\"column\":2,\"nodeType\":\"FunctionExpression\", - \"source\":\"(function() {\",\"endLine\":5,\"endColumn\":2}], - \"errorCount\":0,\"warningCount\":1,\"fixableErrorCount\":0,\"fixableWarningCount\":0, - \"source\":\"/** Tab indentation */(function() {var foo = ['Hello world'];}());\"}]")) - (it "parses ESLint JSON output with errors" - (expect (flycheck-parse-eslint json 'checker nil) - :to-be-equal-flycheck-errors - (list - (flycheck-error-new-at 3 25 'error - "Parsing error: Unexpected token )" - :id nil - :checker 'checker - :buffer nil - :filename nil)))) - (it "parses ESLint JSON output without errors" - (expect (flycheck-parse-eslint json-without-errors 'checker 'buffer) - :to-be-equal-flycheck-errors ())) - (it "parses ESLint JSON output with deprecation warning" - (expect (flycheck-parse-eslint json-with-deprecations 'checker nil) - :to-be-equal-flycheck-errors - (list - (flycheck-error-new-at 3 2 'warning - "Use the function form of 'use strict'." - :id "strict" - :checker 'checker - :buffer nil - :filename nil - :end-line 5 - :end-column 2))))))) - -;;; test-javascript.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/languages/test-php.el b/emacs.d/vendor/flycheck/test/specs/languages/test-php.el deleted file mode 100644 index 41fbdf5..0000000 --- a/emacs.d/vendor/flycheck/test/specs/languages/test-php.el +++ /dev/null @@ -1,77 +0,0 @@ -;;; test-php.el --- Flycheck Specs: PHP -*- lexical-binding: t; -*- - -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for PHP support. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Language PHP" - (describe "The PHDMD error parser" - (it "parses PHPMD XML output" - - (let ((phpmd-xml " - - - - Avoid unused private fields such as '$FOO'. - - - Avoid unused private methods such as 'bar'. - - - Avoid unused parameters such as '$baz'. - - -")) - (expect (flycheck-parse-phpmd phpmd-xml 'checker 'buffer) - :to-be-equal-flycheck-errors - (list - (flycheck-error-new-at 21 nil 'warning - "Avoid unused private fields such as '$FOO'." - :id "UnusedPrivateField" - :checker 'checker - :buffer 'buffer - :filename "foo.php") - (flycheck-error-new-at 24 nil 'warning - "Avoid unused private methods such as 'bar'." - :id "UnusedPrivateMethod" - :checker 'checker - :buffer 'buffer - :filename "foo.php") - (flycheck-error-new-at 24 nil 'warning - "Avoid unused parameters such as '$baz'." - :id "UnusedFormalParameter" - :checker 'checker - :buffer 'buffer - :filename "foo.php"))))))) - -;;; test-php.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/languages/test-ruby.el b/emacs.d/vendor/flycheck/test/specs/languages/test-ruby.el deleted file mode 100644 index 3dbdced..0000000 --- a/emacs.d/vendor/flycheck/test/specs/languages/test-ruby.el +++ /dev/null @@ -1,70 +0,0 @@ -;;; test-typescript.el --- Flycheck Specs: Ruby -*- lexical-binding: t; -*- - -;; Copyright (C) 2017 Flycheck contributors -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Saša Jovanić - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for Ruby support. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Language Ruby" - (describe "The Reek error parser" - (let ((json "[{\"context\":\"ApplicationController#validate_type\", - \"lines\":[15,15,16], - \"message\":\"calls 'params['data']' 3 times\", - \"smell_type\":\"DuplicateMethodCall\", - \"source\":\"app/controllers/application_controller.rb\", - \"name\":\"params['data']\", - \"count\":3, - \"wiki_link\":\"https://github.com/troessner/reek/blob/master/docs/Duplicate-Method-Call.md\"}, - {\"context\":\"ApplicationController#pagination_meta\", - \"lines\":[52], - \"message\":\"doesn't depend on instance state (maybe move it to another class?)\", - \"smell_type\":\"UtilityFunction\", - \"source\":\"app/controllers/application_controller.rb\", - \"wiki_link\":\"https://github.com/troessner/reek/blob/master/docs/Utility-Function.md\"}]")) - (it "parses Reek JSON output" - (expect (flycheck-parse-reek json 'checker 'buffer) - :to-be-equal-flycheck-errors - (list - (flycheck-error-new-at 15 nil 'warning - "ApplicationController#validate_type calls 'params['data']' 3 times" - :id "DuplicateMethodCall" - :checker 'checker - :buffer 'buffer - :filename "app/controllers/application_controller.rb") - (flycheck-error-new-at 16 nil 'warning - "ApplicationController#validate_type calls 'params['data']' 3 times" - :id "DuplicateMethodCall" - :checker 'checker - :buffer 'buffer - :filename "app/controllers/application_controller.rb") - (flycheck-error-new-at 52 nil 'warning - "ApplicationController#pagination_meta doesn't depend on instance state (maybe move it to another class?)" - :id "UtilityFunction" - :checker 'checker - :buffer 'buffer - :filename "app/controllers/application_controller.rb"))))))) - -;;; test-ruby.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/languages/test-typescript.el b/emacs.d/vendor/flycheck/test/specs/languages/test-typescript.el deleted file mode 100644 index 9da1d76..0000000 --- a/emacs.d/vendor/flycheck/test/specs/languages/test-typescript.el +++ /dev/null @@ -1,95 +0,0 @@ -;;; test-typescript.el --- Flycheck Specs: TypeScript -*- lexical-binding: t; -*- - -;; Copyright (C) 2017 Flycheck contributors -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Saša Jovanić - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for TypeScript support. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Language TypeScript" - (describe "The TSLint error parser" - (let ((json "[{\"endPosition\":{\"character\":25,\"line\":0,\"position\":25}, - \"failure\":\"unused variable: 'invalidAlignment'\", - \"name\":\"sample.ts\", - \"ruleName\":\"no-unused-variable\", - \"ruleSeverity\":\"ERROR\", - \"startPosition\":{\"character\":9,\"line\":0,\"position\":9}}, - {\"endPosition\":{\"character\":14,\"line\":2,\"position\":76}, - \"failure\":\"missing semicolon\", - \"name\":\"sample.ts\", - \"ruleName\":\"semicolon\", - \"ruleSeverity\":\"WARNING\", - \"startPosition\":{\"character\":14,\"line\":2,\"position\":76}}]") - (json-with-unknown-severity "no-unused-variable is deprecated. Use the tsc compiler options --noUnusedParameters and --noUnusedLocals instead. - - Could not find implementations for the following rules specified in the configuration: - label-undefined - no-constructor-vars - no-duplicate-key - no-unreachable - use-strict - Try upgrading TSLint and/or ensuring that you have all necessary custom rules installed. - If TSLint was recently upgraded, you may have old rules configured which need to be cleaned up. - -[{\"endPosition\":{\"character\":25,\"line\":0,\"position\":25}, - \"failure\":\"unused variable: 'invalidAlignment'\", - \"name\":\"sample.ts\", - \"ruleName\":\"no-unused-variable\", - \"ruleSeverity\":\"XXX\", - \"startPosition\":{\"character\":9,\"line\":0,\"position\":9}}]")) - (it "parses TSLint JSON output" - (expect (flycheck-parse-tslint json 'checker 'buffer) - :to-be-equal-flycheck-errors - (list - (flycheck-error-new-at 1 10 'error - "unused variable: 'invalidAlignment'" - :id "no-unused-variable" - :checker 'checker - :buffer 'buffer - :filename "sample.ts" - :end-line 1 - :end-column 26) - (flycheck-error-new-at 3 15 'warning - "missing semicolon" - :id "semicolon" - :checker 'checker - :buffer 'buffer - :filename "sample.ts" - :end-line 3 - :end-column 15)))) - (it "parses TSLint JSON output with unknown severity" - (expect (flycheck-parse-tslint json-with-unknown-severity 'checker 'buffer) - :to-be-equal-flycheck-errors - (list - (flycheck-error-new-at 1 10 'warning - "unused variable: 'invalidAlignment'" - :id "no-unused-variable" - :checker 'checker - :buffer 'buffer - :filename "sample.ts" - :end-line 1 - :end-column 26))))))) - -;;; test-typescript.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/test-documentation.el b/emacs.d/vendor/flycheck/test/specs/test-documentation.el deleted file mode 100644 index f678868..0000000 --- a/emacs.d/vendor/flycheck/test/specs/test-documentation.el +++ /dev/null @@ -1,107 +0,0 @@ -;;; test-documentation.el --- Flycheck Specs: Documentation -*- lexical-binding: t; -*- - -;; Copyright (C) 2018 Flycheck contributors -;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for our documentation - -;;; Code: - -(require 'flycheck-buttercup) -(require 'cl-lib) -(require 'seq) -(require 'dash) - -(defun flycheck/collect-matches (pattern filename) - "Collect all instances matching PATTERN from FILENAME." - (let ((matches)) - (with-temp-buffer - (insert-file-contents filename) - (goto-char (point-min)) - (while (re-search-forward pattern nil 'noerror) - (let ((match (intern (match-string 1)))) - (cl-pushnew match matches)) - (-when-let (match (match-string 2)) - (cl-pushnew (intern match) matches)) - (-when-let (match (match-string 3)) - (cl-pushnew (intern match) matches)))) - matches)) - -(defconst flycheck/checker-re - (rx bol " .. syntax-checker:: " (group (1+ nonl)) "\n" - (? " " (group (1+ nonl)) "\n") - (? " " (group (1+ nonl))) eol)) - -(defconst flycheck/defcustom-re - (rx bol " .. defcustom:: " (group (1+ nonl)) "\n" - (? " " (group (1+ nonl)) eol))) - -(describe "Documentation" - (let* ((source-dir (locate-dominating-file default-directory "Cask")) - (languages (expand-file-name "doc/languages.rst" source-dir))) - - (describe "Syntax checkers" - (let ((checkers (flycheck/collect-matches flycheck/checker-re - languages))) - - (it "documents all syntax checkers" - (expect (seq-difference flycheck-checkers checkers) - :to-equal nil)) - - (it "doesn't document syntax checkers that don't exist" - (expect (seq-difference checkers flycheck-checkers) - :to-equal nil))) - - (describe "Options" - (let ((documented-options - (flycheck/collect-matches flycheck/defcustom-re languages)) - (all-options (seq-mapcat (lambda (c) - (flycheck-checker-get c 'option-vars)) - flycheck-checkers))) - - (it "documents all syntax checker options" - (expect (seq-difference all-options documented-options) - :to-equal nil)) - - (it "doesn't document syntax checker options that don't exist" - (expect (seq-difference documented-options all-options) - :to-equal nil)))) - - (describe "Configuration files" - (let ((documented-file-vars (flycheck/collect-matches - (rx ".. syntax-checker-config-file:: " - (group (1+ nonl)) eol) - languages)) - (all-file-vars (delq nil - (seq-map (lambda (c) - (flycheck-checker-get - c 'config-file-var)) - flycheck-checkers)))) - (it "documents all syntax checker configuration files" - (expect (seq-difference all-file-vars documented-file-vars) - :to-equal nil)) - - (it "it doesn't document configuration files that don't exist" - (expect (seq-difference documented-file-vars all-file-vars) - :to-equal nil))))))) - -;;; test-documentation.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/test-error-filters.el b/emacs.d/vendor/flycheck/test/specs/test-error-filters.el deleted file mode 100644 index c6dee98..0000000 --- a/emacs.d/vendor/flycheck/test/specs/test-error-filters.el +++ /dev/null @@ -1,170 +0,0 @@ -;;; test-error-filters.el --- Flycheck Specs: Error Filters -*- lexical-binding: t; -*- - -;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for error filters. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Error filters" - - (describe "flycheck-sanitize-errors" - - (it "removes trailing whitespace" - (let ((err (flycheck-error-new-at 1 1 'error " foo "))) - (expect (flycheck-sanitize-errors (list err)) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 1 1 'error "foo"))))) - - (it "removes empty error IDs" - (let ((err (flycheck-error-new-at 1 1 'error "foo" :id ""))) - (expect (flycheck-sanitize-errors (list err)) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 1 1 'error "foo"))))) - - (it "removes zero columns" - (let ((err (flycheck-error-new-at 1 0 'error "foo"))) - (expect (flycheck-sanitize-errors (list err)) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 1 nil 'error "foo")))))) - - (describe "flycheck-remove-error-file-names" - - (it "removes the given filename from errors" - (let ((errors - (list - (flycheck-error-new-at 1 1 'error "foo" :filename "hello") - (flycheck-error-new-at 2 2 'warning "bar" :filename "world") - (flycheck-error-new-at 3 3 'info "spam")))) - (expect (flycheck-remove-error-file-names "world" errors) - :to-be-equal-flycheck-errors - (list - (flycheck-error-new-at 1 1 'error "foo" :filename "hello") - (flycheck-error-new-at 2 2 'warning "bar") - (flycheck-error-new-at 3 3 'info "spam")))))) - - (describe "flycheck-increment-error-columns" - (it "ignores nil columns" - (let ((errors (list (flycheck-error-new-at 4 nil)))) - (expect (flycheck-increment-error-columns errors) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 4 nil))))) - - (it "increments with the default offset" - (let ((errors (list (flycheck-error-new-at 4 6) - (flycheck-error-new-at 7 9)))) - (expect (flycheck-increment-error-columns errors) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 4 7) - (flycheck-error-new-at 7 10))))) - - (it "increments with a custom offset" - (let ((errors (list (flycheck-error-new-at 4 6) - (flycheck-error-new-at 7 9)))) - (expect (flycheck-increment-error-columns errors 10) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 4 16) - (flycheck-error-new-at 7 19)))))) - - (describe "flycheck-fold-include-levels" - (it "skips over intermittent errors" - ;; See https://github.com/flycheck/flycheck/pull/783 - (let ((errors - (list (flycheck-error-new-at 1 0 'error "In file included from" - :filename "foo.cpp") - (flycheck-error-new-at 6 11 'error "b is not a member of hi" - :filename "foo.cpp") - (flycheck-error-new-at 5 20 'note - "in definition of macro CHECK" - :filename "foo.h") - (flycheck-error-new-at 8 5 'error - "xx was not declared in this scope" - :filename "foo.cpp")))) - (expect - (flycheck-fold-include-levels errors "In file included from") - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 1 0 'error "In include foo.h" - :filename "foo.cpp") - (flycheck-error-new-at 6 11 'error "b is not a member of hi" - :filename "foo.cpp") - (flycheck-error-new-at 5 20 'note "in definition of macro CHECK" - :filename "foo.h") - (flycheck-error-new-at 8 5 'error - "xx was not declared in this scope" - :filename "foo.cpp")))))) - - (describe "flycheck-collapse-error-message-whitespace" - (it "collapses all whitespace in error messages" - (let ((err (flycheck-error-new-at 1 1 'error - "spam \nwith\t eggs"))) - (expect (flycheck-collapse-error-message-whitespace (list err)) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 1 1 'error - "spam with eggs")))))) - - (describe "flycheck-dequalify-error-ids" - (it "removes all nested qualifiers" - (let ((errors - (list (flycheck-error-new-at 1 2 nil nil :id "foo.bar") - (flycheck-error-new-at 1 2 nil nil :id "Spam.With.Eggs")))) - (expect (flycheck-dequalify-error-ids errors) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 1 2 nil nil :id "bar") - (flycheck-error-new-at 1 2 nil nil :id "Eggs"))))) - - (it "leaves unqualified IDs alone" - (let ((errors (list (flycheck-error-new-at 1 2 nil nil :id "foobar")))) - (expect (flycheck-dequalify-error-ids errors) - :to-be-equal-flycheck-errors errors))) - - (it "ignores errors without IDs" - (let ((errors (list (flycheck-error-new-at 3 4)))) - (expect (flycheck-dequalify-error-ids errors) - :to-be-equal-flycheck-errors errors)))) - - (describe "flycheck-remove-error-ids" - (it "ignores errors without IDs" - (let ((errors (list (flycheck-error-new-at 1 2)))) - (expect (flycheck-remove-error-ids errors) - :to-be-equal-flycheck-errors errors))) - - (it "removes error IDs" - (let ((errors (list (flycheck-error-new-at 1 2 nil nil :id "Foo.Bar")))) - (expect (flycheck-remove-error-ids errors) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 1 2)))))) - - (describe "flycheck-fill-empty-line-numbers" - (it "ignores errors with line numbers" - (let ((errors (list (flycheck-error-new-at 1 2)))) - (expect (flycheck-fill-empty-line-numbers errors) - :to-be-equal-flycheck-errors errors))) - - (it "sets errors missing line numbers to line 0" - (let ((errors (list (flycheck-error-new-at nil nil)))) - (expect (flycheck-fill-empty-line-numbers errors) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 0 nil))))))) - -;;; test-error-filters.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/test-error-list.el b/emacs.d/vendor/flycheck/test/specs/test-error-list.el deleted file mode 100644 index 74f4b31..0000000 --- a/emacs.d/vendor/flycheck/test/specs/test-error-list.el +++ /dev/null @@ -1,201 +0,0 @@ -;;; test-error-list.el --- Flycheck Specs: Error List -*- lexical-binding: t; -*- - -;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for the error list. - -;;; Code: - -(require 'flycheck-buttercup) - -(defmacro flycheck/with-error-list-buffer (&rest body) - "Run BODY in a temporary error list buffer." - (declare (indent 0)) - `(with-current-buffer (get-buffer-create flycheck-error-list-buffer) - (delay-mode-hooks (flycheck-error-list-mode)) - (setq delayed-mode-hooks nil) - (prog1 (progn ,@body) - (kill-buffer flycheck-error-list-buffer)))) - -(describe "Error List" - (it "has the correct buffer name" - (expect flycheck-error-list-buffer :to-equal "*Flycheck errors*")) - - (it "has a permanently local source buffer" - (flycheck/with-error-list-buffer - (expect (get 'flycheck-error-list-source-buffer 'permanent-local) - :to-be-truthy))) - - (it "derives from Tabulated List Mode" - (flycheck/with-error-list-buffer - (expect (derived-mode-p 'tabulated-list-mode) :to-be-truthy))) - - (describe "Format" - (it "sets the error list format locally" - (flycheck/with-error-list-buffer - (expect tabulated-list-format :not :to-equal nil) - (expect 'tabulated-list-format :to-be-local))) - - (it "sets a proper padding locally" - (flycheck/with-error-list-buffer - (expect tabulated-list-padding :to-equal 1) - (expect 'tabulated-list-padding :to-be-local))) - - (it "sets the list entries locally" - (flycheck/with-error-list-buffer - (expect tabulated-list-entries :to-equal 'flycheck-error-list-entries) - (expect 'tabulated-list-entries :to-be-local))) - - (it "has a local header line" - (flycheck/with-error-list-buffer - (expect header-line-format - :to-equal " File Line Col Level ID Message (Checker) ") - (expect 'header-line-format :to-be-local)))) - - (describe "Columns" - (it "has the file name in the 1st column" - (flycheck/with-error-list-buffer - (expect (aref tabulated-list-format 0) - :to-equal - '("File" 6)))) - - (it "has the line number in the 2nd column" - (flycheck/with-error-list-buffer - (expect (aref tabulated-list-format 1) - :to-equal - '("Line" 5 flycheck-error-list-entry-< :right-align t)))) - - (it "has the column number in the 3rd column" - (flycheck/with-error-list-buffer - (expect (aref tabulated-list-format 2) - :to-equal '("Col" 3 nil :right-align t)))) - - (it "has the error level in the 4th column" - (flycheck/with-error-list-buffer - (expect (aref tabulated-list-format 3) - :to-equal '("Level" 8 flycheck-error-list-entry-level-<)))) - - (it "has the error ID in the 5th column" - (flycheck/with-error-list-buffer - (expect (aref tabulated-list-format 4) - :to-equal '("ID" 6 t)))) - - (it "has the error message in the 6th column" - (flycheck/with-error-list-buffer - (expect (aref tabulated-list-format 5) - :to-equal '("Message (Checker)" 0 t))))) - - (describe "Entry" - (let* ((warning (flycheck-error-new-at 10 12 'warning "A foo warning" - :checker 'emacs-lisp-checkdoc - :id "W1")) - (entry (flycheck-error-list-make-entry warning)) - (cells (cadr entry))) - - (it "has the error object as ID" - (expect (car entry) :to-be warning)) - - (it "has the line number in the 2nd cell" - (expect (aref cells 1) :to-equal - (list "10" - 'type 'flycheck-error-list - 'face 'flycheck-error-list-line-number))) - - (it "has the column number in the 3rd cell" - (expect (aref cells 2) :to-equal - (list "12" - 'type 'flycheck-error-list - 'face 'flycheck-error-list-column-number))) - - (it "has an empty 3rd cell if there is no column number" - (cl-letf* (((flycheck-error-column warning) nil) - (entry (flycheck-error-list-make-entry warning)) - (cells (cadr entry))) - (expect (aref cells 2) :to-equal - (list "" - 'type 'flycheck-error-list - 'face 'flycheck-error-list-column-number)))) - - (it "has the error level in the 4th cell" - (expect (aref cells 3) :to-equal - (list "warning" - 'type 'flycheck-error-list - 'face (flycheck-error-level-error-list-face 'warning)))) - - (it "has the error ID in the 5th cell" - (expect (aref cells 4) :to-equal - (list "W1" - 'type 'flycheck-error-list-explain-error - 'face 'flycheck-error-list-id - 'help-echo "W1"))) - - (let ((checker-name (propertize "emacs-lisp-checkdoc" - 'face 'flycheck-error-list-checker-name))) - (it "has the error message in the 6th cell" - (let* ((message (format (propertize "A foo warning (%s)" - 'face 'default) - checker-name))) - (expect (aref cells 5) :to-equal - (list message 'type 'flycheck-error-list - 'help-echo message)))) - - (it "has a default message in the 6th cell if there is no message" - (cl-letf* (((flycheck-error-message warning) nil) - (entry (flycheck-error-list-make-entry warning)) - (cells (cadr entry)) - (message (format (propertize "Unknown warning (%s)" - 'face 'default) - checker-name))) - (expect (aref cells 5) :to-equal - (list message 'type 'flycheck-error-list - 'help-echo message))))))) - - (describe "Filter" - (it "kills the filter variable when resetting the filter" - (flycheck/with-error-list-buffer - (setq-local flycheck-error-list-minimum-level 'error) - (expect 'flycheck-error-list-minimum-level :to-be-local) - (flycheck-error-list-reset-filter) - (expect 'flycheck-error-list-minimum-level :not :to-be-local))) - - (it "filters errors with lower levels" - (let ((flycheck-error-list-minimum-level 'warning) - (errors (list (flycheck-error-new-at 10 10 'error) - (flycheck-error-new-at 20 20 'warning) - (flycheck-error-new-at 30 30 'info)))) - (expect (flycheck-error-list-apply-filter errors) - :to-be-equal-flycheck-errors - (list (flycheck-error-new-at 10 10 'error) - (flycheck-error-new-at 20 20 'warning))))) - - (describe "Mode Line" - (it "shows no mode line indicator if no filter is set" - (let ((flycheck-error-list-minimum-level nil)) - (expect (flycheck-error-list-mode-line-filter-indicator) - :to-be-empty-string))) - - (it "shows the level filter in the mode line if set" - (let ((flycheck-error-list-minimum-level 'warning)) - (expect (flycheck-error-list-mode-line-filter-indicator) - :to-equal " [>= warning]")))))) - -;;; test-error-list.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/test-error-parsers.el b/emacs.d/vendor/flycheck/test/specs/test-error-parsers.el deleted file mode 100644 index 7c98276..0000000 --- a/emacs.d/vendor/flycheck/test/specs/test-error-parsers.el +++ /dev/null @@ -1,94 +0,0 @@ -;;; test-code-style.el --- Flycheck Specs: Error parsers -*- lexical-binding: t; -*- - -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for generic error parsers. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Error parsers" - (describe "The checkstyle parser" - (let ((checkstyle-xml " - - - - - - - - -") - (checkstyle-expected-errors - (list - (flycheck-error-new - :filename "test-javascript/missing-semicolon.js" - :checker 'checker - :buffer 'buffer - :line 3 - :column 21 - :level 'error - :message "Missing semicolon." - :id "Foo3") - (flycheck-error-new - :filename "test-javascript/missing-semicolon.js" - :checker 'checker - :buffer 'buffer - :line 3 - :column nil - :level 'warning - :message "Implied global 'alert'" - :id "Foo4") - (flycheck-error-new - :filename "test-javascript/missing-quote.js" - :checker 'checker - :buffer 'buffer - :line 1 - :column nil - :level 'error - :message "Cannot read property 'id' of undefined" - :id "Foo1")))) - (it "parses Checkstyle XML using built-in XML parser" - (let ((flycheck-xml-parser 'flycheck-parse-xml-region)) - (expect (flycheck-parse-checkstyle checkstyle-xml - 'checker 'buffer) - :to-be-equal-flycheck-errors - checkstyle-expected-errors))) - - (it "parses Checkstyle XML using libxml" - (assume (fboundp 'libxml-parse-xml-region) "libxml not available") - (let ((flycheck-xml-parser 'libxml-parse-xml-region)) - (expect (flycheck-parse-checkstyle checkstyle-xml - 'checker 'buffer) - :to-be-equal-flycheck-errors - checkstyle-expected-errors))) - - (it "parses Checkstyle XML with automatic parser selection" - (expect (flycheck-parse-checkstyle checkstyle-xml - 'checker 'buffer) - :to-be-equal-flycheck-errors - checkstyle-expected-errors))))) - -;;; test-error-parsers.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/test-generic-checkers.el b/emacs.d/vendor/flycheck/test/specs/test-generic-checkers.el deleted file mode 100644 index 97a89a6..0000000 --- a/emacs.d/vendor/flycheck/test/specs/test-generic-checkers.el +++ /dev/null @@ -1,49 +0,0 @@ -;;; test-generic-checkers.el --- Flycheck Specs: Generic checkers -*- lexical-binding: t; -*- - -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for generic syntax checkers - -;;; Code: - -(require 'cl-lib) -(require 'flycheck-buttercup) - -(describe "Generic syntax checkers" - (describe "Major mode" - (it "supports the current major mode" - (cl-letf (((flycheck-checker-get 'foo 'modes) '(bar-mode foo-mode)) - (major-mode 'bar-mode)) - (expect (flycheck-checker-supports-major-mode-p 'foo) - :to-be-truthy))) - - (it "supports a major mode" - (cl-letf (((flycheck-checker-get 'foo 'modes) '(bar-mode foo-mode))) - (expect (flycheck-checker-supports-major-mode-p 'foo 'foo-mode) - :to-be-truthy))) - - (it "does not support a major mode" - (cl-letf (((flycheck-checker-get 'foo 'modes) '(bar-mode foo-mode))) - (expect (flycheck-checker-supports-major-mode-p 'foo 'spam-mode) - :not :to-be-truthy))))) - -;;; test-generic-checkers.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/test-global-mode.el b/emacs.d/vendor/flycheck/test/specs/test-global-mode.el deleted file mode 100644 index ff9d6ce..0000000 --- a/emacs.d/vendor/flycheck/test/specs/test-global-mode.el +++ /dev/null @@ -1,128 +0,0 @@ -;;; test-global-mode.el --- Flycheck Specs: Global Mode -*- lexical-binding: t; -*- - -;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for Global Flycheck Mode. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Global Flycheck Mode" - - (let (global-mode-enabled global-modes) - - ;; Save and restore the configuration for Global Flycheck Mode - (before-all - (setq global-mode-enabled global-flycheck-mode - global-modes flycheck-global-modes)) - - (after-all - (global-flycheck-mode (if global-mode-enabled 1 -1)) - (setq flycheck-global-modes global-modes)) - - (before-each - ;; Make sure that Global Flycheck Mode is enabled and all modes are - ;; permitted in each spec - (global-flycheck-mode 1) - (setq flycheck-global-modes t)) - - (it "checks whether it may enable the mode" - (let (flycheck-may-enable-mode) - (spy-on 'flycheck-may-enable-mode :and-return-value t) - - (with-temp-buffer - (emacs-lisp-mode) - (expect flycheck-mode :to-be-truthy) - (expect 'flycheck-may-enable-mode :to-have-been-called)))) - - (it "enables Flycheck in a regular buffer" - (with-temp-buffer - (rename-buffer "foo") - (emacs-lisp-mode) - (expect (flycheck-may-enable-mode) :to-be-truthy))) - - (it "enables Flycheck when only that major mode is allowed" - (let ((flycheck-global-modes '(emacs-lisp-mode))) - (with-temp-buffer - (rename-buffer "foo") - (emacs-lisp-mode) - (expect (flycheck-may-enable-mode) :to-be-truthy)))) - - (it "does not enable Flycheck in temporary buffers" - (with-temp-buffer - (expect (flycheck-may-enable-mode) :not :to-be-truthy))) - - (it "does not enable Flycheck in ephemeral buffers" - (with-temp-buffer - (rename-buffer " foo") - (emacs-lisp-mode) - (expect (flycheck-may-enable-mode) :not :to-be-truthy))) - - (it "does not enable Flycheck in special modes" - (with-temp-buffer - (rename-buffer "foo") - (special-mode) - (expect (flycheck-may-enable-mode) :not :to-be-truthy))) - - (it "does not enable Flycheck in fundamental-mode" - (with-temp-buffer - (rename-buffer "foo") - (fundamental-mode) - (expect (flycheck-may-enable-mode) :not :to-be-truthy))) - - (it "does not enable Flycheck in encrypted buffers" - (spy-on 'flycheck-encrypted-buffer-p :and-return-value t) - (with-temp-buffer - (rename-buffer "foo") - (emacs-lisp-mode) - (expect (flycheck-may-enable-mode) :not :to-be-truthy) - (expect 'flycheck-encrypted-buffer-p :to-have-been-called))) - - (it "does not enable Flycheck in compilation mode" - (with-temp-buffer - (rename-buffer "foo") - (compilation-mode) - (expect (flycheck-may-enable-mode) :not :to-be-truthy))) - - (it "does not enable Flycheck if all major modes are disabled" - (let ((flycheck-global-modes nil)) - (with-temp-buffer - (rename-buffer "foo") - (emacs-lisp-mode) - (expect (flycheck-may-enable-mode) :not :to-be-truthy)))) - - (it "does not enable Flycheck if the major mode is disabled" - (let ((flycheck-global-modes '(not emacs-lisp-mode))) - (with-temp-buffer - (rename-buffer "foo") - (emacs-lisp-mode) - (expect (flycheck-may-enable-mode) :not :to-be-truthy)))) - - (it "does not enable Flycheck if the major mode is not enabled" - (let ((flycheck-global-modes '(text-mode))) - (with-temp-buffer - (rename-buffer "foo") - (emacs-lisp-mode) - (expect (flycheck-may-enable-mode) :not :to-be-truthy)))))) - -;;; test-global-mode.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/test-gpg.el b/emacs.d/vendor/flycheck/test/specs/test-gpg.el deleted file mode 100644 index b33170f..0000000 --- a/emacs.d/vendor/flycheck/test/specs/test-gpg.el +++ /dev/null @@ -1,135 +0,0 @@ -;;; test-gpg.el --- Flycheck Specs: GPG-encrypted buffers -*- lexical-binding: t; -*- - -;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for detecting encrypted buffers. - -;;; Code: - -(require 'flycheck-buttercup) -(require 'epa) -(require 'epg-config) ; For GPG configuration -(require 'epa-file) ; To test encrypted buffers - -(defun flycheck/encrypt-string-to-file (string passphrase filename) - "Encrypt STRING with PASSPHRASE and write to FILENAME. - -This function is ABSOLUTELY INSECURE, use only and exclusively for testing." - ;; Encrypt string via GPG, passing it on standard input. Enforce a pipe for - ;; communication with `process-connection-type nil', otherwise gpg tries to - ;; read beyond EOF and never finishes. - (let* ((process-connection-type nil) - (gpg (start-process "flycheck-buttercup-gpg" nil - epg-gpg-program "--batch" "--no-tty" - "--pinentry-mode" "loopback" - "--homedir" epg-gpg-home-directory - "-c" - "--passphrase" passphrase - "-o" filename - "-"))) - (process-send-string gpg string) - (process-send-eof gpg) - ;; Wait until GPG exists - (while (process-live-p gpg) - (accept-process-output) - (sleep-for 0.1)))) - -(defun flycheck/gnupg21-available-p () - "Whether GPG is available or not." - (let ((config (epg-find-configuration 'OpenPGP 'force))) - ;; `epg-check-configuration' errors if the configuration is invalid, and - ;; otherwise returns nil, hence ignore errors and default to `t' to get a - ;; proper truthy result - (and config (ignore-errors (or (epg-check-configuration config "2.1") t))))) - -(describe "Encrypted buffers" - - (describe "flycheck-encrypted-buffer-p" - (let ((gpg-tty (getenv "GPG_TTY")) - (old-home-dir epg-gpg-home-directory) - temp-home-dir) - - (before-each - ;; Use a temporary directory as home directory for GPG to make sure that - ;; GPG runs against an existing home directory (some CI systems may have - ;; users without home directories). See - ;; https://github.com/flycheck/flycheck/pull/891 - (setq temp-home-dir (make-temp-file "flycheck-epg-gpg-home" 'dir-flag)) - (setq epg-gpg-home-directory temp-home-dir) - ;; Clear GPG TTY information from environment to prevent gpg from - ;; hanging, see https://github.com/flycheck/flycheck/pull/890 - (setenv "GPG_TTY")) - - (after-each - ;; Restore GPG TTY information - (setenv "GPG_TTY" gpg-tty) - - ;; Delete our custom gpg home directory, and restore the old default - (ignore-errors (delete-directory temp-home-dir 'recursive)) - (setq epg-gpg-home-directory old-home-dir)) - - (it "considers a temporary buffer as unencrypted" - (with-temp-buffer - (expect (flycheck-encrypted-buffer-p) :not :to-be-truthy))) - - (it "considers a file buffer as unencrypted" - (let ((file-name (make-temp-file "flycheck-file"))) - (unwind-protect - (with-temp-buffer - (insert-file-contents file-name 'visit) - (set-visited-file-name file-name 'no-query) - (expect (flycheck-encrypted-buffer-p) :not :to-be-truthy) - (ignore-errors (delete-file file-name)))))) - - (it "recognizes an encrypted buffer" - (assume (version<= "25" emacs-version)) - (assume (flycheck/gnupg21-available-p) "gpg not installed") - - ;; Create a temporary file name. Do NOT use `make-temp-file' here, - ;; because that hangs with the extension `.gpg'. - (let* ((file-name (expand-file-name - (concat (make-temp-name "flycheck-encrypted-file") - ".txt.gpg") - temporary-file-directory)) - (epa-pinentry-mode 'loopback) - (passphrase "spam with eggs") - ;; Teach EPA about the passphrase for our file to decrypt without - ;; any user interaction. `epa-file-passphrase-alist' stores - ;; canonical file names, hence we pass the temporary file name - ;; through `file-truename' to remove any symlinks in the path. - (epa-file-cache-passphrase-for-symmetric-encryption t) - (epa-file-passphrase-alist (list (cons (file-truename file-name) - passphrase)))) - (unwind-protect - (with-temp-buffer - (flycheck/encrypt-string-to-file "Hello world" - passphrase file-name) - (let ((inhibit-message t)) - ;; Silence "Decrypting ..." messages to keep buttercup output - ;; clean - (insert-file-contents file-name 'visit)) - (set-visited-file-name file-name 'no-query) - - (expect (flycheck-encrypted-buffer-p) :to-be-truthy)) - (ignore-errors (delete-file file-name)))))))) - -;;; test-gpg.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/test-melpa-package.el b/emacs.d/vendor/flycheck/test/specs/test-melpa-package.el deleted file mode 100644 index 139b154..0000000 --- a/emacs.d/vendor/flycheck/test/specs/test-melpa-package.el +++ /dev/null @@ -1,95 +0,0 @@ -;;; test-melpa-package.el --- Flycheck Specs: MELPA Package -*- lexical-binding: t; -*- - -;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for Flycheck MELPA packaging. - -;;; Code: - -(require 'flycheck-buttercup) -(require 'seq) -(require 'json) -(require 'let-alist) - -(defvar url-http-end-of-headers) - -(defun flycheck/get-melpa-version () - "Get the MELPA version of Flycheck. - -Return the version as string, or nil if we failed to obtain the -version." - (let ((buffer (with-timeout (5) - (url-retrieve-synchronously - "http://melpa.org/archive.json" 'silent)))) - (when (and buffer (buffer-live-p buffer)) - (unwind-protect - (with-current-buffer buffer - (goto-char url-http-end-of-headers) - (let-alist (json-read) - (format "%s.%s" (aref .flycheck.ver 0) (aref .flycheck.ver 1)))) - (kill-buffer))))) - -(describe "MELPA package" - (let* ((directory (make-temp-file "flycheck-test-package" 'directory)) - (filename (expand-file-name "flycheck.tar" directory)) - (travis-p (getenv "TRAVIS")) - version - entries) - - (before-all - (unless travis-p - (with-demoted-errors "Failed to obtain Flycheck package: %S" - (setq version (flycheck/get-melpa-version)) - - (when version - (let* ((name (format "flycheck-%s" version)) - (url (format "http://melpa.org/packages/%s.tar" name))) - (with-timeout (5) - (url-copy-file url filename))) - - (when (file-exists-p filename) - (setq entries (seq-map (lambda (entry) - (replace-regexp-in-string - (rx bos (1+ (not (any "/"))) "/") - "" entry)) - (process-lines "tar" "-tf" filename)))))))) - - (before-each - (assume (not travis-p) - (concat "Don't test package on Travis CI. " - "Let's not spoil MELPA download stats.")) - (assume version "Flycheck MELPA version not found") - (assume entries "Could not download and parse Flycheck package")) - - (after-all - (ignore-errors (delete-directory directory 'recursive))) - - (it "contains flycheck" - (expect entries :to-contain "flycheck.el")) - - (it "contains flycheck-buttercup" - (expect entries :to-contain "flycheck-buttercup.el")) - - (it "contains flycheck-ert" - (expect entries :to-contain "flycheck-ert.el")))) - -;;; test-melpa-package.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/test-mode-line.el b/emacs.d/vendor/flycheck/test/specs/test-mode-line.el deleted file mode 100644 index fbea857..0000000 --- a/emacs.d/vendor/flycheck/test/specs/test-mode-line.el +++ /dev/null @@ -1,49 +0,0 @@ -;;; test-mode-line.el --- Flycheck Specs: Mode Line -*- lexical-binding: t; -*- - -;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for mode line reporting. - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Mode Line" - (it "shows the number of errors and warnings" - (let ((flycheck-current-errors - (list (flycheck-error-new-at 1 1 'warning "warning 1") - (flycheck-error-new-at 2 2 'warning "warning 2") - (flycheck-error-new-at 1 1 'error "error")))) - (expect (flycheck-mode-line-status-text 'finished) - :to-equal " FlyC:1|2"))) - - (it "does not show the number of infos" - (let ((flycheck-current-errors - (list (flycheck-error-new-at 1 1 'info "info")))) - (expect (flycheck-mode-line-status-text 'finished) :to-equal " FlyC"))) - - (it "includes the prefix" - (let ((flycheck-mode-line-prefix "foobar") - flycheck-current-errors) - (expect (flycheck-mode-line-status-text 'finished) :to-equal " foobar")))) - -;;; test-mode-line.el ends here diff --git a/emacs.d/vendor/flycheck/test/specs/test-util.el b/emacs.d/vendor/flycheck/test/specs/test-util.el deleted file mode 100644 index 98c7359..0000000 --- a/emacs.d/vendor/flycheck/test/specs/test-util.el +++ /dev/null @@ -1,134 +0,0 @@ -;;; test-util.el --- Flycheck Specs: Utility functions -*- lexical-binding: t; -*- - -;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors - -;; Author: Sebastian Wiesner - -;; This file is not part of GNU Emacs. - -;; 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 3 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 . - -;;; Commentary: - -;; Specs for Flycheck's utility functions - -;;; Code: - -(require 'flycheck-buttercup) - -(describe "Utilities" - - (describe "flycheck-buffer-empty-p" - - (it "considers an empty buffer as empty" - (with-temp-buffer - (expect (flycheck-buffer-empty-p) :to-be-truthy))) - - (it "does not consider a buffer with content as empty" - (with-temp-buffer - (insert "foo bar") - (expect (flycheck-buffer-empty-p) :not :to-be-truthy))) - - (it "detects emptiness of narrowed buffers" - (with-temp-buffer - (insert "foo\nbar") - (goto-char (point-min)) - (narrow-to-region (point-min) (point-min)) - (expect (buffer-string) :to-equal "") - (expect (flycheck-buffer-empty-p) :not :to-be-truthy)))) - - (describe "flycheck-buffer-saved-p" - - (it "considers an unmodified buffer without backing file unsaved" - (with-temp-buffer - (expect (flycheck-buffer-saved-p) :not :to-be-truthy))) - - (it "considers a modified buffer without backing file unsaved" - (with-temp-buffer - (set-buffer-modified-p t) - (expect (flycheck-buffer-saved-p) :not :to-be-truthy))) - - (it "considers an unmodified buffer with backing file saved" - (spy-on 'file-exists-p :and-return-value t) - (spy-on 'buffer-file-name :and-return-value "test-buffer-name") - (with-temp-buffer - (expect (flycheck-buffer-saved-p) :to-be-truthy)) - (expect (spy-calls-count 'file-exists-p) :to-equal 1) - (expect (spy-calls-count 'buffer-file-name) :to-equal 1)) - - (it "considers a modified buffer with backing file unsaved" - (spy-on 'file-exists-p :and-return-value t) - (spy-on 'buffer-file-name :and-return-value "test-buffer-name") - (with-temp-buffer - (set-buffer-modified-p t) - (expect (flycheck-buffer-saved-p) :not :to-be-truthy)) - (expect (spy-calls-count 'file-exists-p) :to-equal 1) - (expect (spy-calls-count 'buffer-file-name) :to-equal 1))) - - - (describe "flycheck-default-executable-find" - - (describe "non-existing programs" - (it "returns nil when given a non-existing program name" - (let ((result (flycheck-default-executable-find - "flycheck-nonexisting"))) - (expect result :to-be nil))) - - (it "returns nil when given a non-existing relative program path" - (let ((result (flycheck-default-executable-find - "dir/flycheck-nonexisting"))) - (expect result :to-be nil))) - - (it "returns nil when given a non-existing absolute program path" - (let ((result (flycheck-default-executable-find - "/usr/bin/flycheck-nonexisting"))) - (expect result :to-be nil)))) - - (describe "existing programs with implied suffix" - (let (temp-dir program-path) - (before-each - (setq temp-dir (make-temp-file "flycheck-exec-find-root" 'dir-flag) - program-path (expand-file-name - "dir/flycheck-testprog.program" temp-dir)) - (make-directory (expand-file-name "dir" temp-dir)) - (write-region "" nil program-path) - (set-file-modes program-path - (logior 73 (file-modes program-path)))) - (after-each - (ignore-errors (delete-directory temp-dir 'recursive))) - - (it "resolves the path when given an existing program name" - (let* ((default-directory temp-dir) - (exec-path (list (expand-file-name "dir" temp-dir))) - (exec-suffixes '(".program")) - (result (flycheck-default-executable-find - "flycheck-testprog"))) - (expect result :to-equal program-path))) - - (it "resolves the path when given an existing relative program path" - (let* ((default-directory temp-dir) - (exec-suffixes '(".program")) - (result (flycheck-default-executable-find - "dir/flycheck-testprog"))) - (expect result :to-equal program-path))) - - (it "resolves the path when given an existing absolute program path" - (let* ((default-directory temp-dir) - (exec-suffixes '(".program")) - (result (flycheck-default-executable-find - (expand-file-name "dir/flycheck-testprog" temp-dir)))) - (expect result :to-equal program-path))))))) - - -;;; test-util.el ends here