Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

linterの「Lint As You Type」オプションを利用しているとエラーが出る #27

Open
nyoro712 opened this issue Sep 12, 2016 · 9 comments

Comments

@nyoro712
Copy link

以下の環境で利用しています。

  • Atom 1.10.2
  • linter-textlint 2.0.0
  • linter 1.11.16
    • Lint As You Type オプション有効
  • textlint 7.1.1

lint自体は正常に行われるのですが、ファイルを更新するたびにエラーダイアログが表示されます。
エラーメッセージは次の通りです。

Error: Column start (31) greater than line length (0)
    at rangeFromLineNumber (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\atom-linter\lib\index.js:179:11)
    at D:/PortableApplications/Atom/.atom/packages/linter-textlint/lib/index.js:116:20
    at Array.map (native)
    at D:/PortableApplications/Atom/.atom/packages/linter-textlint/lib/index.js:112:25
    at tryCatcher (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\util.js:16:23)
    at Promise._settlePromiseFromHandler (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\promise.js:510:31)
    at Promise._settlePromise (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\promise.js:567:18)
    at Promise._settlePromise0 (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\promise.js:612:10)
    at Promise._settlePromises (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\promise.js:691:18)
    at Promise._fulfill (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\promise.js:636:18)
    at PromiseArray._resolve (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\promise_array.js:125:19)
    at PromiseArray._promiseFulfilled (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\promise_array.js:143:14)
    at Promise._settlePromise (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\promise.js:572:26)
    at Promise._settlePromise0 (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\promise.js:612:10)
    at Promise._settlePromises (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\promise.js:691:18)
    at Async._drainQueue (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\async.js:138:16)
    at Async._drainQueues (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\async.js:148:10)
    at Async.drainQueues (D:\PortableApplications\Atom\.atom\packages\linter-textlint\node_modules\bluebird\js\release\async.js:17:14)

なお、保存されたファイルを初めて読み込んだ時にはエラーは出ず、そこから何か変更を加えるたびにエラーが出るという感じです。
また、linterの Lint As You Type オプションを無効にするとエラーは出なくなります。

@nyoro712
Copy link
Author

書き忘れていましたが、OSは Windows 7 Professional Service Pack 1 (64bit) です。

@azu
Copy link
Contributor

azu commented Oct 7, 2016

OS: OSX Yosemite 10.10.5と El Capitan
Atom 1.10.2
でも同じ問題がおきてました。

@1000ch
Copy link
Owner

1000ch commented Oct 12, 2016

うーん。macOS Sierra + Atom 1.10.2 ですが、再現できません…

@nyoro712
Copy link
Author

エラーは常に出るわけではなく、出る時と出ない時があるようです。
この1か月使ってみて気付いたのですが、どうやらtextlintで警告が出た行を触るとlinter-textlintのエラーが出るみたいです。

というわけで試してみました。

環境は次の通りです。

  • OS: Windows 7 Professional Service Pack 1 (64bit)
  • Atom 1.10.2
    • linter 1.11.18
      • Lint As You Type オプション有効
    • linter-textlint 2.0.0
  • textlint 7.1.1
    • textlint-rule-preset-japanese 1.3.3

テスト用に、次の3行のテキストを「test.txt」としてファイルに保存します。

この行にはtextlintによる警告は出ない。
この行にはtextlintにより警告が発せられる。この行に何かしようとするとエラーになるようだ。
この行にはtextlintによる警告は出ない。

このファイルを Atom で開くと、lintが行われ、次のような警告が出ます。

textlint Error preset-japanese/no-doubled-joshi 一文に二回以上利用されている助詞 "と" がみつかりました。at line 2 col 38

この状態から、テキストをいろいろ編集してみると、次のような結果になりました。

  • 2行目「しようとすると」の2回目の「」よりも、もしくは1行目の任意の桁にカーソルを置く
    • その位置で改行する ⇒ linter-textlintのエラーが出る
    • その位置に「」という1文字を挿入する ⇒ linter-textlintのエラーは出ない
    • その位置の1文字を削除する ⇒ linter-textlintのエラーは出ない
  • 2行目「しようとすると」の2回目の「以後、もしくは3行目の任意の桁にカーソルを置く
    • その位置で改行する ⇒ linter-textlintのエラーは出ない
    • その位置に「」という1文字を挿入する ⇒ linter-textlintのエラーは出ない
    • その位置の1文字を削除する ⇒ linter-textlintのエラーは出ない

@nyoro712
Copy link
Author

本日 Atom 1.11.1 が出たので、

  • OS: Windows 7 Professional Service Pack 1 (64bit)
  • Atom 1.11.1
    • linter 1.11.18
      • Lint As You Type オプション有効
    • linter-textlint 2.0.0
  • textlint 7.1.1
    • textlint-rule-preset-japanese 1.3.3

の環境でも上記を試してみましたが、やはり同様の結果でした。

@azu
Copy link
Contributor

azu commented Oct 29, 2016

https://github.com/azu/linter-atom-issue-27 で再現できました。

git clone https://github.com/azu/linter-atom-issue-27 issue
cd issue 
npm i
atom .

で 2行目の先頭で backspace を押すと例外が出る感じでした。

10 -29-2016 21-39-33

ルールによって不正なカラム位置が返されてるのかもしれないです。
(textlint自体はline, columnがはみ出ているかのチェックをしてないはずなので)

@azu
Copy link
Contributor

azu commented Nov 8, 2016

http://denpa-shinbun.com/entry/textlint-rule も同じ話っぽい。
ルールが異常値出したときにtextlint側で丸めるのか、Atom plugin側で丸めるのかというのはありそう。
(個人的には両方かなという感じはしてます)

@1000ch
Copy link
Owner

1000ch commented Nov 10, 2016

ルールが異常値出したときにtextlint側で丸めるのか、Atom plugin側で丸めるのかというのはありそう。
(個人的には両方かなという感じはしてます)

両方が良いですね。linter-textlint 側も対処します...

@azu
Copy link
Contributor

azu commented Nov 10, 2016

ルールが異常値を出すのはあり得えますが、この場合Lint As You Typeじゃなくても起きるはずなんですよね。
なので、Linterのチェックも怪しい感じがしてきますね。
textlintは非同期で処理するので、チェック瞬間の行数とチェック後の行数は異なることはありそうなので、その辺補正されてないと存在しない行へのエラレポートになってしまいそう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants