【Linux】【nvim】プラグイン追加 - ale【SW】

ale という非同期の文法チェッカが人気のようなので導入を試みた。

結論から言うと、Warning を消した状態であれば使ってみようと思ったが、
Warning が消す方法が分からなかったので導入は見送った。

なお、特にウインドウ幅が変ることもないのでイライラしなさそうなので、機会があれば再導入したい。

参考にしたページ

NeovimでモダンなPython環境を構築する
Vimメモ : ALE(Asynchronous Lint Engine)で非同期コードチェック - もた日記
https://qiita.com/lighttiger2505/items/e0ada17634516c081ee7
Vimメモ : ALE(Asynchronous Lint Engine)で非同期コードチェック - もた日記
Python: Pylintの警告を非表示にする - ikuyani knowledge
mieki256's diary - Pylintの設定ファイルについて

[Python]pep8とpylintの設定ファイルを作成して一部の警告を非表示にする - dackdive's blog

導入手順

環境

  • Ubuntu 18.04
  • Neovim

1. w0rp/ale のインストール

dein を使っているので、$HOME/.config/nvim/init.vim に以下の一文を書いてインストールする。

call dein#add('w0rp/ale')

2. 文法チェックしたい言語に対応したチェッカをインストールする

今回は python なので、pylint というものをインストールした。

sudo apt-get install -y pylint

その他の言語に対応したチェックツールについては、公式サイトにて次の通り書かれている。
https://github.com/w0rp/ale#1-supported-languages-and-tools

Language Tools
ASM gcc
Ansible ansible-lint
API Blueprint drafter
AsciiDoc alex !!, proselint, redpen, write-good
Awk gawk
Bash language-server, shell -n flag, shellcheck, shfmt
Bourne Shell shell -n flag, shellcheck, shfmt
C cppcheck, cpplint, clang, clangtidy !!, clang-format, flawfinder, gcc
C++ (filetype cpp) clang, clangcheck !!, clangtidy !!, clang-format, cppcheck, cpplint !!, cquery, flawfinder, gcc
CUDA nvcc
C# mcs see:help ale-cs-mcs for details, mcsc !! see:help ale-cs-mcsc for details and configuration
Chef foodcritic
Clojure joker
CloudFormation cfn-python-lint
CMake cmakelint
CoffeeScript coffee, coffeelint
Crystal crystal !!
CSS csslint, prettier, stylelint
Cucumber cucumber
Cython (pyrex filetype) cython
D dmd
Dafny dafny !!
Dart dartanalyzer !!, language_server, dartfmt
Dockerfile hadolint
Elixir credo, dialyxir, dogma, mix !!
Elm elm-format, elm-make
Erb erb, erubi, erubis
Erlang erlc, SyntaxErl
Fish fish -n flag
Fortran gcc
Fountain proselint
FusionScript fusion-lint
Git Commit Messages gitlint
GLSL glslang, glslls
Go gofmt, goimports, go vet !!, golint, gotype !!, gometalinter !!, go build !!, gosimple !!, staticcheck !!
GraphQL eslint, gqlint, prettier
Haml haml-lint
Handlebars ember-template-lint
Haskell brittany, ghc, stack-ghc, stack-build !!, ghc-mod, stack-ghc-mod, hlint, hdevtools, hfmt
HTML alex !!, HTMLHint, proselint, tidy, write-good
Idris idris
Java checkstyle, javac, google-java-format, PMD
JavaScript eslint, flow, jscs, jshint, prettier, prettier-eslint, prettier-standard, standard, xo
JSON fixjson, jsonlint, jq, prettier
Kotlin kotlinc !!, ktlint !! see :help ale-integration-kotlin for configuration instructions
LaTeX alex !!, chktex, lacheck, proselint, redpen, vale, write-good
Less lessc, prettier, stylelint
LLVM llc
Lua luac, luacheck
Mail alex !!, proselint, vale
Make checkmake
Markdown alex !!, markdownlint !!, mdl, prettier, proselint, redpen, remark-lint !!, textlint, vale, write-good
MATLAB mlint
Mercury mmc !!
NASM nasm !!
Nim nim check !!
nix nix-instantiate
nroff alex !!, proselint, write-good
Objective-C clang
Objective-C++ clang
OCaml merlin see :help ale-ocaml-merlin for configuration instructions, ols
Perl perl -c, perl-critic, perltidy
PHP hack, hackfmt, langserver, phan see :help ale-php-phan to instructions, php -l, phpcs, phpmd, phpstan, phpcbf, php-cs-fixer
PO alex !!, msgfmt, proselint, write-good
Pod alex !!, proselint, write-good
Pony ponyc
proto protoc-gen-lint
Pug pug-lint
Puppet puppet, puppet-lint
Python autopep8, black, flake8, isort, mypy, prospector, pycodestyle, pyls, pylint !!, yapf
QML qmlfmt, qmllint
R lintr
ReasonML merlin see :help ale-reasonml-ols for configuration instructions, ols, refmt
reStructuredText alex !!, proselint, redpen, rstcheck, vale, write-good
Re:VIEW redpen
RPM spec rpmlint (disabled by default; see :help ale-integration-spec)
Ruby brakeman !!, rails_best_practices !!, reek, rubocop, ruby, rufo
Rust cargo !! (see :help ale-integration-rust for configuration instructions), rls, rustc, rustfmt
SASS sass-lint, stylelint
SCSS prettier, sass-lint, scss-lint, stylelint
Scala fsc, scalac, scalafmt, scalastyle
Slim slim-lint
SML smlnj
Solidity solhint, solium
Stylus stylelint
SQL sqlint
Swift swiftlint, swiftformat
Tcl nagelfar !!
Terraform tflint
Texinfo alex !!, proselint, write-good
Text^ alex !!, proselint, redpen, textlint, vale, write-good
Thrift thrift
TypeScript eslint, prettier, tslint, tsserver, typecheck
Verilog iverilog, verilator
Vim vint
Vim help^ alex !!, proselint, write-good
Vue prettier
XHTML alex !!, proselint, write-good
XML xmllint
YAML swaglint, yamllint

3. ale の設定をする

以下の一文を $HOME/.config/nvim/init.vim に書いた。

" エラー行に表示するマーク
let g:ale_sign_error = '⨉'
let g:ale_sign_warning = '⚠'
" エラー行にカーソルをあわせた際に表示されるメッセージフォーマット
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
" エラー表示の列を常時表示
let g:ale_sign_column_always = 1

" ファイルを開いたときにlint実行
let g:ale_lint_on_enter = 1
" ファイルを保存したときにlint実行
let g:ale_lint_on_save = 1
" 編集中のlintはしない
let g:ale_lint_on_text_changed = 'never'

" lint結果をロケーションリストとQuickFixには表示しない
" 出てると結構うざいしQuickFixを書き換えられるのは困る
let g:ale_set_loclist = 0
let g:ale_set_quickfix = 0
let g:ale_open_list = 0
let g:ale_keep_list_window_open = 0

" 有効にするlinter
let g:ale_linters = {
\   'python': ['pylint'],
\}

" ALE用プレフィックス
nmap [ale] <Nop>
map <C-k> [ale]
" エラー行にジャンプ
nmap <silent> [ale]<C-P> <Plug>(ale_previous)
nmap <silent> [ale]<C-N> <Plug>(ale_next)

4. Warning は表示しないようにする

Warning の嵐で煩いので、Error のみ表示するようにする。下記を参考にした。

Python: Pylintの警告を非表示にする - ikuyani knowledge
mieki256's diary - Pylintの設定ファイルについて

pylint --generate-rcfile > $HOME/.pylintrc

$HOME/.pylintrc 内の記述を次のように変える。

extension-pkg-whitelist=
↓
extension-pkg-whitelist=PySide

その後

以上で Warning が消えてくれたかと思ったが、すぐに Warning 表示が再現してしまった。

色々と調べて $HOME/.config/pylintrc にしたり、カレントにコピーしたりしたが、Warning 消えず。

画面がチカチカするのは好きではないので、ale は無効にした。