😞

textlint

2022/08/01に公開

承前

https://mako-note.com/ja/textlint-emacs/
を元に設定しようとしたが、かなり苦しんだ。

textlint

そもそもEmacsからtextlintが呼び出せなかった。

Emacsからtextlintを呼び出せるように/opt/homebrew/binにシンボリックリンクを作成。

% ls -l /opt/homebrew/bin/textlint 
ls -l /opt/homebrew/bin/textlint 
lrwxr-xr-x  1 XXXXXX  admin  44 Jul 30 16:20 /opt/homebrew/bin/textlint -> ../lib/node_modules/textlint/bin/textlint.js

ちなみにEmacsのinit.elでPATH変数を定義している。

(setenv "PATH" "/opt/homebrew/bin:/opt/homebrew/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/opt/X11/bin:/Library/Apple/usr/bin")

よくよく環境を確認したらEmacsのPATH変数に「/opt/homebrew/opt/node@16/bin」を追加してもよかった。

ルールを.textlintに定義。

  {
    "rules": {
      "preset-ja-technical-writing": true,
      "no-dropping-the-ra": true
    }
  }

ところがこれだけだと「.org」「.howm」ファイルがtextlintの対象にならなかった。
 textlintをデバックオプションで動かしてはじめて対象になってないことに気づく。

textlint --debug a.org
<割愛>
  textlint:engine-core No Process files that are un-support extensions: [ '/Users/XXXXXX/a.org' ] +1ms

「.org」「.howm」を対象に。

下記のように指定したら有効になったが、これが正しい対応なのか、わからない。

{
  "plugins": {
    "@textlint/markdown": {
      "extensions": [".howm", ".org"]
    }
  },
  "rules": {
    "preset-ja-technical-writing": true,
    "no-dropping-the-ra": true
  }
}  
% cat a.org
cat a.org
今日は、天気が良さそうに思います。
食べれる。
% textlint a.org
textlint a.org

/Users/XXXXXX/a.org
  1:13  error  弱い表現: "思います" が使われています。  ja-technical-writing/ja-no-weak-phrase
  2:3   error  ら抜き言葉を使用しています。             no-dropping-the-ra

✖ 2 problems (2 errors, 0 warnings)  

flycheck

init.elに下記を追加して。

(add-hook 'after-init-hook #'global-flycheck-mode)  

https://mako-note.com/ja/textlint-emacs/
を元にチェッカーをでっちあげる。

;; textlint用のチェッカー
(flycheck-define-checker textlint
  "A linter for text."
  :command ("textlint" "--format" "unix" "--plugin" "org" source)
  :error-patterns
  ((warning line-start (file-name) ":" line ":" column ": "
            (id (one-or-more (not (any " "))))
            (message (one-or-more not-newline)
                     (zero-or-more "\n" (any " ") (one-or-more not-newline)))
            line-end))
  :modes (text-mode org-mode))  

Discussion